可能重复:
如何在 MySQL 中选择随机行?
好的,所以我有一个存储游戏数据的表,它达到了 700 万行。
我需要一种有效的方法来选择随机行。
这是我到目前为止所尝试的:
SELECT `id` FROM `information` ORDER BY RAND() LIMIT 1;
相当合乎逻辑的查询。运行需要8 秒。完全不能接受。
第二次尝试:
SELECT FLOOR(RAND()*COUNT(`id`)) INTO @target FROM `information`;
SELECT `id` FROM `information` LIMIT @target,1;
由于第二个查询中的变量出现语法错误而失败。
第三次尝试:
SELECT `id` FROM (SELECT `id` FROM `information`) `a` ORDER BY RAND() LIMIT 1
这里的想法是去除所有其他字段,因为它们是不必要的体积。它工作了一半,将时间缩短到 6 秒。不过还是太长了。
还有……我出去了。我想不出任何其他方式(但现在是凌晨 1 点......),所以任何建议都将不胜感激。谢谢!