为什么不使用mysql ORDER BY RAND()?

zac*_*987 4 mysql

我看到许多网站说不要使用ORDER BY RAND(),例如http://forge.mysql.com/wiki/Top10SQLPerformanceTips所以我运行测试,我测试了20k记录表的速度和性能,其中10k记录他们有用户名="用户名":

SELECT username FROM testingspeed WHERE username='username' ORDER BY RAND();
Run Code Online (Sandbox Code Playgroud)

结果 :

Showing rows 0 - 29 (10,000 total, Query took 0.0119 sec).
id = 1 
select_type = SIMPLE
table = testingspeed
type = ref
posible_keys = username
key = username
key_len = 32
ref = const
rows = 3225
Extra = Using where; Using index; Using temporary; Using filesort
Run Code Online (Sandbox Code Playgroud)

因为只执行查询需要0.0119秒,所以它应该是非常好的速度,为什么人们仍然说不要使用ORDER BY RAND()?为什么3225行只受影响?为什么10,000行不受影响?

fyr*_*fyr 5

问题ORDER BY RAND()是你的解释告诉你"使用临时"和"使用filesort".对于每个请求,都会创建并排序临时表.这是一个非常繁重的操作.当您的数据库没有处于高负载时,它可能无关紧要,但它会花费很多性能.