从大型mysql表中选择随机行的快速方法是什么?
我在php工作,但我对任何解决方案感兴趣,即使它是用另一种语言.
我看到很多关于这个主题的主题,但我并没有成功地理解如何去做.
例如,如果我有这个表:
+------+-------+-------+
| id | name | class |
+------+-------+-------+
| 5 | test | one |
| 10 | test2 | one |
| 12 | test5 | one |
| 7 | test6 | two |
+------+-------+-------+
Run Code Online (Sandbox Code Playgroud)
而我想只显示"一"类中的X个随机行,我该怎么做?
注意:它是一张大桌子,所以我不想使用ORDER BY RAND.
我对Django查询有一个与性能相关的问题。
假设我有一张有10,000条记录的员工表。现在,如果我要选择5个年龄大于或等于20岁的随机雇员,那么可以说大约有5500名20岁或以上的雇员。django查询将是:
Employee.objects.filter(age__gte=20).order_by('?')[:5]
Run Code Online (Sandbox Code Playgroud)
并且该查询在mysql中的原始副本将是:
SELECT * FROM `database`.`employee`
WHERE `employee`.`age` >= 20
ORDER BY RAND ()
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
从Django查询的外观看,数据库首先返回5500条记录,然后python以随机或我们选择的任何顺序对这些记录进行排序,并返回前五个记录的大块,而原始查询将仅直接从数据库返回五个记录。
我的问题是两个查询之间是否有性能差异?如果是这样,哪个更好,为什么?