mysql expalin字段详解

前言 table :  CREATE TABLE `xx_user` (   `crad` int(11) NOT NULL,   `name` varch

前言

table : 

CREATE TABLE `xx_user` (
  `crad` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `description` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`crad`),
  KEY `name_desc_index` (`name`,`description`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

索引信息:

            crad是主键索引      [name,description]是联合索引

explain select * from sys_user_role order by user_id;

由上图可以发现,执行计划的额外信息Extra:Using filesort这是为啥呢?

解析:这是因为我们查询出来的数据 需要在进行一次排序按照user_id进行排序,我们知道from 查询出来的数据 并不是按user_id排序的,所以我们按照user_id排序,mysql就帮我们进行了一次排序,按照user_id

explain select * from xx_user order by crad;

那为什么上面的执行计划的额外信息里面没有filesort呢?

解析: 首先我这里使用的innoDB存储引擎,所以这里主键索引的叶子节点存放的是整行数据,(辅助索引叶子节点存储的是主键值)而且是有序的(b+树的特性),

当我们from 查询数据的时候,已经是按照我们的主键排序了crad的,所以当我们order by crad的时候不需要mysql再帮我们进行排序,所以没有file sort

 

明天继续......