您的位置:首页 > 数据库 > MySQL

MySQL 随机排序的一个性能差异

2012-04-11 09:30 316 查看
工作中需要实现一个功能,在主页上随机展示热门的促销活动。主页都是每天重新生成静态,这样保证了主页活动部分每天都有变化。

这就需要对数据库查询做随机排序,查到一下资料:

假设一张表 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语句都是基于主键查询的,性能再快不过了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息