从3百万行中选择随机

时间:2013-04-26 14:23:38

标签: mysql random

我有320万行,有几个键可以帮助加快排序速度。然而,随着我的桌子的增长,每天的事情变得越来越慢。您能否请各位查看我的查询,并告诉我是否有其他解决方案可以让这个过程更快更好?

SELECT * FROM (SELECT `numbers` FROM `avotf`.`master` WHERE `active`=1 order by `monthly_mins`,`called`,`added`,rand() limit 200) AS T1 ORDER BY RAND() LIMIT 1

3 个答案:

答案 0 :(得分:3)

假设您的表格中有一个数字id列,这样的内容应该可以使用(从here借用):

SELECT * FROM `table` 
 WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;

执行此操作:

SELECT * FROM `table` ORDER BY RAND() LIMIT 1;

它可以工作,但会非常慢

答案 1 :(得分:0)

问题是因为你使用带有大量数据的RAND()

您应该阅读Jan Kneschke的以下博文:ORDER BY RAND()

他列出了一些可能的解决方案及其表现行为。

答案 2 :(得分:0)

众所周知,ORDER BY RAND()可能会非常慢,虽然您尝试在此处选择子选项,但仍会创建临时表。

目前尚不清楚为什么在子选择中选择RAND(),然后忽略它并在外部选择上创建一个新的排序键。也许你可以利用它。

您的ORDER BY条件非常广泛,如果您在那里缺少索引,那么将进行行扫描以获取所有索引。

不要忘记EXPLAIN您的查询。