评论

收藏

[MySQL] MySQL5.6优化了Order by排序limit

数据库 数据库 发布于:2021-07-04 10:59 | 阅读数:421 | 评论:0

  表结构(1000万行记录):
mysql> show create table sbtest\G;
*************************** 1. row ***************************
     Table: sbtest
Create Table: CREATE TABLE `sbtest` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `k` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8
  

  我现在对sbtest表非索引字段进行order by排序,版本是MySQL5.5,耗时时间如下:
DSC0000.jpg

  结果是3分钟14.78秒。
  

  下面再到MySQL5.6里,同样执行这条SQL,看看耗时时间:
DSC0001.jpg

  结果是12.53秒。
  

  这个是为啥呢?在MySQL5.5里对非索引字段排序时,会对表的所有记录进行一次排序操作,然后取出LIMIT 10条记录,余下的记录抛弃。而在MySQL5.6里,只针对LIMIT 10条记录进行排序,余下的记录并不会进行排序,这样就加快了速度,提高了性能。
  

  参考手册:
DSC0002.jpg

DSC0003.jpg

DSC0004.jpg

  

  


  
关注下面的标签,发现更多相似文章