使用慢查询在SQL炼金术中获取记录计数

时间:2019-11-08 14:18:48

标签: python sqlalchemy

我正在使用sql alchemy而不是flask sql alchemy的成熟系统上工作。它的搜索特别慢。要求是添加分页。问题是,如果我提交了计数搜索,那么根据我的测量,我发现整个搜索时间在50%到100%之间跳跃。相关代码段如下。我想要的是要在主搜索中返回的记录总数,而不必进行二级计数搜索。 (使用_get_count大约比单独使用.count()快50%)有什么想法吗?

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 个答案:

答案 0 :(得分:1)

您对后端具有管理员权限吗?您可以创建(取决于所访问的数据库)materialized view来缓存查询,然后定期刷新它。