我正在使用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万条记录。我可以通过任何方式优化此查询,但仍然可以随机返回吗?
答案 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
你可能必须非常谨慎,继续尝试随机起始位置,直到你找到足够的结果来找到胜利者。