您现在的位置是: 首页 > MySQL MySQL
MySQL 随机排序 ORDER BY RAND() 性能优化
冬寂
2022-07-22 10:19:46
【MySQL】
4977人已围观
表记录 1876302,totalScore 创建了索引。
第一种:MySQL 随机排序常规写法:展开目录
SELECT * FROM users WHERE totalScore BETWEEN 5 AND 100 ORDER BY RAND() LIMIT 100;
执行耗时 1.18s
SELECT * FROM users WHERE totalScore BETWEEN 5 AND 100 ORDER BY RAND() LIMIT 100;
执行耗时 1.25s
这样的耗时不能接受。
第二种:stackoverflow 上找了一个黑科技写法:展开目录
SELECT * FROM users WHERE totalScore BETWEEN 5 AND 100 ORDER BY 37*(UNIX_TIMESTAMP() ^ id) & 0xffff LIMIT 100;
执行耗时 150ms
SELECT * FROM users WHERE totalScore BETWEEN 5 AND 100 ORDER BY 37*(UNIX_TIMESTAMP() ^ id) & 0xffff LIMIT 100;
执行耗时 153ms
执行耗时直接缩短至 150ms,已经比上一个写法快很多了,而且 LIMIT 1000 时耗时也是 150ms 左右。
第三种方式:展开目录
SELECT *
FROM users AS u
INNER JOIN (SELECT id FROM users WHERE totalScore BETWEEN 5 AND 100 ORDER BY RAND() LIMIT 100) AS t ON t.id=u.id
WHERE 1
执行耗时 110ms
LIMIT 1000 时耗时也稳定在 110ms 左右。
耗时最少,推荐使用第三种。
相关文章
随机图文
-
绿化带植物还有那么多讲究?
种在路边需要 叶子大(阴凉,减小噪音,吸附粉尘), 长得快(快速绿化,不能10多年还长不大,不阴凉), 绿叶期长(长时间阴凉), 耐寒抗冻(好生养), 不能是同一个品种,得交叉种植(不至于得病全死了) 不能种桉树之类的(有毒,对人不好,对鸟不好) -
对话罗永浩:再创业可能后悔,不再创业百分之百后悔
对话罗永浩:再创业可能后悔,不再创业百分之百后悔 -
《人类动物园》:为什么说都市是人类动物园?
第一,人类为什么不习惯都市生活呢?第二,如果人类不习惯都市,为什么还住在里面不出来呢?第三,人类能不能在都市里住得更舒服? -
MySQL 隐式类型转换导致的字符串比较异常
MySQL 隐式类型转换导致的字符串比较异常