与其他解决方案相比,ORDER BY rand()
的性能是否非常慢?如果是,有什么更好的方法从数据库中选择随机行?MySQL select随机行 - rand()性能
我的查询:
SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1;
与其他解决方案相比,ORDER BY rand()
的性能是否非常慢?如果是,有什么更好的方法从数据库中选择随机行?MySQL select随机行 - rand()性能
我的查询:
SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1;
是的,ORDER BY RAND()
可以在较大的结果集很慢。
的选项与这一说法(到一个数组)获取结果集:
SELECT sName FROM bpoint WHERE placeID=?;
之后 - 使用array_rand($resultset)
从$resultset
查询得到一个随机的项目。
那么,php函数array_rand()会更快吗? – 2013-04-29 23:09:23
@JamaicaBob - 它确实取决于结果集的大小。你在表bpoint中有多少行? – bestprogrammerintheworld 2013-04-29 23:19:04
大约10.000行 – 2013-04-29 23:24:44
我不认为这有可能是一个简单的解决方案,反正你是对的,是大表很慢,反正这可能是上有多少数据是有用的冷杉你http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/
这要看情况。我们在谈论多大的桌子? – bestprogrammerintheworld 2013-04-29 22:33:18
这也取决于你的意思是“随机”:你是否需要以相等的概率选择每个记录?或者是一个完全统一的分配不是必要的? – eggyal 2013-04-29 22:34:35
5-10.000行。期望的等同概率。 – 2013-04-29 22:37:58