我看到许多网站说不使用ORDER BY RAND(),例如http://forge.mysql.com/wiki/Top10SQLPerformanceTips。所以我运行了一个测试,测试了20k条记录表的速度和性能,其中有10k条记录他们有username =“ username”:
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行?
问题ORDER BY RAND()是您所解释的告诉您“使用临时文件”和“使用文件排序”。对于每个请求,都会创建一个临时表并进行排序。那是相当繁重的操作。当您的数据库不处于高负载状态时,这可能并不重要,但是它将花费很多性能。
ORDER BY RAND()