Mysql 从300万行中随机选择

Mysql 从300万行中随机选择,mysql,random,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 假设您的表有一

我有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

假设您的表有一个数值
id
列,类似这样的内容应该可以使用(借用自):

不要这样做:

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

它可以工作,但速度会非常慢

问题在于,您使用RAND()处理大量数据

你应该阅读Jan Kneschke的以下博文:


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

众所周知,
ORDER BY RAND()
的速度可能非常慢,尽管您尝试在此处对子选择进行选择,但仍然会创建一个临时表

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

您的
orderby
条件非常广泛,如果您缺少一个索引,那么将进行行扫描以获取所有索引

别忘了解释你的查询。

按兰德排序()
,这是和的可能副本
SELECT * FROM `table` ORDER BY RAND() LIMIT 1;