如果说ORDER BY 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
查询中获取一个随机项。
i
到j
范围内的值,您可以使用过滤器WHERE column >= FLOOR(i + RAND() * (j – i)) ORDER BY column LIMIT 1
。但是,如果存在间隙,则无法获得完全均匀的概率分布... - eggyal