Possible Duplicate:
MySQL: Alternatives to ORDER BY RAND()
我目前有一个以 ORDER BY RAND(HOUR(NOW())) LIMIT 40
结尾的查询,以获得 40 个随机结果。结果列表每小时更改一次。
这会杀死查询缓存,从而损害性能。
您能否建议另一种方法来获取随机(ish)结果集,这些结果会不时变化?它不必每小时,也不必完全随机。
我更喜欢随机结果,而不是对表中的任意字段进行排序,但作为最后的手段我会这样做......
(这是一个新产品列表,我想不时地对它们进行一些调整)。
如果您有 ID 列,最好执行以下操作:
-- create a variable to hold the random number
SET @rownum := SELECT count(*) FROM table;
SET @row := (SELECT CEIL((rand() * @rownum));
-- use the random number to select on the id column
SELECT * from tablle WHERE id = @row;
选择随机id号的逻辑可以移到应用层。
SELECT * FROM table ORDER BY RAND LIMIT 40
效率非常低,因为 MySQL 将处理表中的所有记录,对所有行执行全表扫描,并随机排序。