如何针对大型表优化RAND()函数?

时间:2014-04-16 10:07:45

标签: mysql

我需要从表格中获取20张随机图像 我当前的查询是

SELECT * FROM foo ORDER BY RAND() LIMIT 20;

这个问题可能有所帮助,但他的查询要复杂得多,我从初学者那里就明白了答案 How can i optimize MySQL's ORDER BY RAND() function?

1 个答案:

答案 0 :(得分:3)

您的查询的性能问题不是rand()本身,而是大量行上的order by。如果你知道foo有一定数量的行,比如1,000,000,那么像这样的东西会运行得更快:

SELECT *
FROM foo
WHERE RAND() < 0.00001
ORDER BY RAND()
LIMIT 20;

where子句将order by的行数减少到大约100.并且,您将非常确信该数字至少为20.您也可以自动执行此计算:

SELECT *
FROM foo cross join
     (SELECT count(*) as cnt FROM foo) const
WHERE RAND() < 100.0/cnt
ORDER BY RAND()
LIMIT 20;
相关问题