工作中需要实现一个功能,在主页上随机展示热门的促销活动。主页都是每天重新生成静态,这样保证了主页活动部分每天都有变化。
这就需要对数据库查询做随机排序,查到一下资料:
假设一张表 table1 ,主键字段是 id ,我们要从中获取一个随机的记录,SQL语句写法
SELECT * FROM table1 ORDER BY rand() LIMIT 1
用MySQL 的 EXPLAIN 看看这条 SQL 的分析,发现 type = ALL ,也就是说全表扫描,性能超级差。
把SQL语句换成
SELECT id FROM table1 ORDER BY rand() LIMIT 1
在 EXPLAIN 一下 type = index,key = PRIMARY ,也就是说用到了主键索引了,速度很快。
因此第一条 SQL 语句我们通过转换成两条SQL语句来提升性能
SELECT id FROM table1 ORDER BY rand() LIMIT 1
SELECT * FROM table1 WHERE id=?
而这两条SQL语句都是基于主键查询的,性能再快不过了。
MySQL 随机排序的一个性能差异
最新推荐文章于 2024-06-06 09:01:54 发布