索引 - 初识explain分析

  • 作者:KK

  • 发表日期:2017.3.27


快速解释

EXPLAIN SELECT * FROM article WHERE user_id = 120317;\G不会输出查询结果,而是输出SQL语句的执行分析结果,如下:

           id: 1
  select_type: SIMPLE		//查询类型:该语句只是一个简单的查询
        table: article		//被查询的表
         type: ref			//解释有点麻烦,在这个阶段不是重点
possible_keys: user_id		//可能会用到的索引
          key: user_id		//最终被使用的索引
      key_len: 4			//使用的索引长度,越短越好,4还可以吧,我认为不要随便超过8就好,简单地说它与被索引字段的类型字节长度差不多的,但并非完全对应
          ref: const			//本阶段也不解释
         rows: 9		//简单地说就是被扫描的行数
        Extra:				//本阶段也不解释

这里是初步讲explain,并不深入讲,我在上面简单地做了一些注释

后面对索引的使用情况进行观察时,经常要用到explain关键字来分析语句来确认情况

笼统地说,程序员和DBA都会用explain对查询语句的性能进行分析解读,所以在这里先初步上手explain,后面再专门深入研究运用它吧


通常用来分析SELECT语句,不能分析INSERT/UPDATE/DELETE语句

EXPLAIN INSERT INTO article(title, user_id) VALUES('aaa', 33);

EXPLAIN UPDATE article SET user_id = 44 WHERE id = 1;

EXPLAIN DELETE FROM article WHERE id = 1;

都会报语法错误,我们可以这么认为:虽然UPDATE和DELETE语句都有WHERE,但是通过分析SELECT语句就能知道怎样的WHERE条件会有怎样的索引使用情况,这样就能作为参考用在UPDATE和DELETE里面了