快速高效的随机查询集 - Django
我在StackOverflow上看到一些关于Django中随机查询集的帖子。我发现大家都说用order_by('?')
这个方法速度慢且效率低,但我自己的经验并没有这样觉得。
我有一个表格,里面有30,000条记录(最终的生产版本大约会有200,000条记录)。我可以把这些记录分成大约10,000到15,000条记录的小表。
所以,我想快速有效地随机获取100条(可能是200条)记录。根据我个人的看法,创建一个包含100个随机数字的列表并不是一个好主意,因为有些主键可能会缺失(比如因为删除等原因)。
而且,我不想生成一个随机数字,然后再取后面99条记录。我会使用Postgresql(没有特别的原因……如果有更好的选择我也可以换)。我测试过order_by('id')[:100]
这个方法,感觉速度很快(我觉得)。每次生成列表只花了大约0.017秒。
- 为什么文档上说这个方法不适合随机操作?
- 你更喜欢哪种随机方法?
- 有没有更好的办法来实现这个?
1 个回答
1
ORDER BY random()
LIMIT n
这种方法是可行的,但速度很慢,因为表中的每一行都得被考虑到。
对于3万行的数据,这种方法还是比较快的,但如果是3000万行,就没那么快了。
我建议你看看这个相关的问题:
在PostgreSQL中选择随机行的最佳方法