gpt4 book ai didi

python - 在有很多记录的表中通过 random() 优化顺序

转载 作者:行者123 更新时间:2023-11-30 23:09:46 25 4
gpt4 key购买 nike

我正在使用 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

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

最佳答案

据我了解,order by random() 会生成一个全表扫描,这会很糟糕。

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

所以像这样:

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

你可能不得不对此采取相当的防御措施,不断尝试随机的起始位置,直到你找到足够的结果来找到赢家。

关于python - 在有很多记录的表中通过 random() 优化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20341519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com