在包含大量记录的表中通过random()优化顺序

时间:2013-12-03 02:04:19

标签: python mysql sqlalchemy

我正在使用SQLAlchemy来获取一个随机结果(从计数结果我只选择一个基于某些东西/这不能在sql级别选择)满足条件,我的查询看起来像

for p in session.query(PersonModel).filter(and_(PersonModel.age >25, PersonModel.gender == 1)).order_by(func.rand()).limit(count):
    # some calculations and return only one

问题是人员表非常大,超过30万条记录。我可以通过任何方式优化此查询,但仍然可以随机返回吗?

1 个答案:

答案 0 :(得分:0)

据我所知,按random()顺序生成一个完整的表格扫描,这将是坏事。

一种选择是选择随机起点,然后应用您的标准来尝试找到随机起始结果。

类似于:

start = random.randint(max_id)
for p in session.query(PersonModel).filter(id__gte=start).limit(count):
    # some calculations and return only one

你可能必须非常谨慎,继续尝试随机起始位置,直到你找到足够的结果来找到胜利者。