我看到许多网站说不使用ORDER BY RAND(),例如http://forge.mysql.com/wiki/Top10SQLPerformanceTips所以我运行测试,我测试了20k记录表的速度和性能,其中10k条记录的用户名= “用户名”:
SELECT username FROM testingspeed WHERE username='username' ORDER BY RAND();
结果:
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
因为只执行查询需要0.0119秒,所以它应该是非常好的速度,为什么人们仍然说不要使用ORDER BY RAND()?为什么3225行只受影响?为什么10,000行不受影响?
答案 0 :(得分:5)
ORDER BY RAND()
的问题在于,您的解释会告诉您“使用临时”和“使用文件排序”。对于每个请求,都会创建并排序临时表。这是一个非常繁重的操作。当您的数据库没有处于高负载状态时可能无关紧要,但这会花费很多性能。