我需要从表格中获取20张随机图像 我当前的查询是
SELECT * FROM foo ORDER BY RAND() LIMIT 20;
这个问题可能有所帮助,但他的查询要复杂得多,我从初学者那里就明白了答案 How can i optimize MySQL's ORDER BY RAND() function?
答案 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;