我有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
答案 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)
答案 2 :(得分:0)
众所周知,ORDER BY RAND()
可能会非常慢,虽然您尝试在此处选择子选项,但仍会创建临时表。
目前尚不清楚为什么在子选择中选择RAND()
,然后忽略它并在外部选择上创建一个新的排序键。也许你可以利用它。
您的ORDER BY
条件非常广泛,如果您在那里缺少索引,那么将进行行扫描以获取所有索引。
不要忘记EXPLAIN
您的查询。