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语句都是基于主键查询的,性能再快不过了。
这就需要对数据库查询做随机排序,查到一下资料:
假设一张表 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 随机排序的一个性能差异
- MySQL raid级别的随机IO性能差异对比
- mysql 生成随机时间 mysql 统计数量并根据最后面一个数据的时间排序
- MySQL查询随机数据的4种方法和性能对比
- MySQL查询随机数据的4种方法和性能对比
- 一个简易的mysql性能查询脚本
- 定义一个有10个空间的整型数组,数组中的每个位置存放8-98之间的随机偶数, 输出这个数组中的每个数,再排序,排序后再输出。
- 一个字节造成的巨大性能差异——SQL Server存储结构
- 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引
- java对一个字符串随机排序的方法
- 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
- 编程产生一个int数组,长度为30,并向其中随机插入1-30,并且不能重复输出数组。实现一个冒泡排序算法对其进行排序,输出排序结果
- 写一个函数实现数组中的元素随机乱序排序
- 一个MySQL 5.7 分区表性能下降的案例分析
- 【数据库原理】索引实例证明(一个单引号引发的MYSQL性能损失)
- 一个单引号引发的MYSQL性能损失
- [转]一个字节造成的巨大性能差异——SQL Server存储结构
- 一个单引号引发的MYSQL性能损失(转)
- 【mysql】一个关于order by排序的问题
- 一个单引号引发的MYSQL性能问题分析