2013-04-29 84 views
12

与其他解决方案相比,ORDER BY rand()的性能是否非常慢?如果是,有什么更好的方法从数据库中选择随机行?MySQL select随机行 - rand()性能

我的查询:

SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1; 
+3

这要看情况。我们在谈论多大的桌子? – bestprogrammerintheworld 2013-04-29 22:33:18

+0

这也取决于你的意思是“随机”:你是否需要以相等的概率选择每个记录?或者是一个完全统一的分配不是必要的? – eggyal 2013-04-29 22:34:35

+0

5-10.000行。期望的等同概率。 – 2013-04-29 22:37:58

回答

13

是的,ORDER BY RAND()可以在较大的结果集很慢。

的选项与这一说法(到一个数组)获取结果集:

SELECT sName FROM bpoint WHERE placeID=?; 

之后 - 使用array_rand($resultset)$resultset查询得到一个随机的项目。

+2

那么,php函数array_rand()会更快吗? – 2013-04-29 23:09:23

+0

@JamaicaBob - 它确实取决于结果集的大小。你在表bpoint中有多少行? – bestprogrammerintheworld 2013-04-29 23:19:04

+0

大约10.000行 – 2013-04-29 23:24:44