Получение количества записей в sql alchemy с медленным запросом - PullRequest
2 голосов
/ 08 ноября 2019

Я работаю над зрелой системой, которая использует алхимию sql, а не алхимию sql. У него один особенно медленный поиск. Требование заключается в добавлении нумерации страниц. Проблема в том, что если я отправляю поиск по количеству, то по моим измерениям я вижу скачок от 50% до 100% общего времени поиска. Соответствующий фрагмент ниже. Я хотел бы, чтобы общее количество записей было возвращено в основном поиске и не нужно было выполнять поиск вторичного количества. (используя _get_count, поскольку он примерно на 50% быстрее, чем один .count ()). Есть идеи?

query = session.query(BusinessAttributes.name, 
    BusinessAttributes.trading_as,Business.business_ref)\
    .join(Business)\
    .filter(and_(or_(*filters)))\
    .distinct().order_by(BusinessAttributes.name)           

results = query.limit(limit).offset((page-1)*limit).all()   

if page == 1 and len(results) < limit:
    total_business_count = len(results)
else:
    total_business_count = _get_count(query)    

return results, total_business_count


def _get_count(q):
    count_q = q.statement.with_only_columns([func.count()]).order_by(None)
    return q.session.execute(count_q).scalar()

1 Ответ

1 голос
/ 08 ноября 2019

У вас есть доступ администратора к бэкэнду? Вы можете создать (в зависимости от базы данных, к которой вы обращаетесь) материализованное представление , чтобы кэшировать запрос и затем периодически обновлять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...