一尘不染

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

mysql

我看到许多网站说不使用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行?


阅读 315

收藏
2020-05-17

共1个答案

一尘不染

问题ORDER BY RAND()是您所解释的告诉您“使用临时文件”和“使用文件排序”。对于每个请求,都会创建一个临时表并进行排序。那是相当繁重的操作。当您的数据库不处于高负载状态时,这可能并不重要,但是它将花费很多性能。

2020-05-17