1. Использовать индексы <a href="https://docs.sqlalchemy.org/en/21/core/metadata.html#index" rel="nofollow">https://docs.sqlalchemy.org/en/21/core/metadata.ht...</a> <br/> <br/> 2. Выбор только необходимых столбцов это достигается через `select` <br/> <a href="https://docs.sqlalchemy.org/en/21/orm/query.html#sqlalchemy.orm.query.Query.select" rel="nofollow">https://docs.sqlalchemy.org/en/21/orm/query.html#s...</a> <br/> <br/> 3. Можно птимизация использования функций: <blockquote>Функции, используемые в запросах, могут сделать их медленными. Проверьте, какие функции вы используете и как они влияют на производительность. В SQLAlchemy это функции из модуля `func`.</blockquote> <br/> <a href="https://docs.sqlalchemy.org/en/21/core/sqlelement.html#sqlalchemy.sql.expression.func" rel="nofollow">https://docs.sqlalchemy.org/en/21/core/sqlelement....</a> <br/> <br/> <br/> <pre><code class="python">query = (
select(
func.coalesce(A.id, "").label("card_1"),
func.coalesce(A.serial_number, "").label("card_2"),
func.coalesce(B.name, "").label("card_3"),
func.coalesce(C.name, "").label("card_4"),
func.coalesce(A.user_name, "").label("card_5"),
func.coalesce(A.user_phone_number, "").label("card_6"),
func.coalesce(A.balance_current, "").label("card_7"),
func.coalesce(A.balance_bonus, "").label("card_8"),
func.coalesce(A.active, "").label("card_9"),
func.coalesce(D.name, "0").label("card_10"),
func.coalesce(A.type, "").label("card_11") if filter_body.is_active == 1 else None,
)
.filter(A.company_id.in_(filter_body.prj_ids))
.join(B, A.company_id == B.id)
.join(C, A.voc_id == C.id)
.outerjoin(D, A.tariff_plan == D.id)
.offset(filter_body.offset)
.limit(filter_body.limit)
)
async with self._async_session_scope() as s:
result = await s.execute(query)
return result.fetchall()</code></pre>