面试mysql之SQL优化总结一:索引的使用

目录

1.查看一个表中的所有索引

2.删除一个表中指定的索引(删除一个表中的所有索引方法暂时没有找到,有说用存储函数的以后试试)

3.查看表中索引的执行计划

4.执行计划列说明

以customer表为例

1.查看一个表中的所有索引

show index from customer;

 


2.删除一个表中指定的索引(删除一个表中的所有索引方法暂时没有找到,有说用存储函数的以后试试

drop index FK_cst_customer_industry on customer;

3.查看表中索引的执行计划

explain select * from customer;

面试mysql之SQL优化总结一:索引的使用_第1张图片

4.执行计划列说明

  • id列:表示执行的顺序分两种情况(重要)

                id值相同:按照顺序从上到下执行

               id值不同:id值大的先执行,id值相同的按照顺序执行。

  • select_type列:查询的类型包含SIMPLE,衍生类型Derivat等(了解)
  • type列:索引使用类型(重要) 

           type列的值为all: 表示全表扫描

           type列的值为index:

           type列的值为range:表示使用的是范围

           type列的值为ref:表示使用的是非唯一性索引

           type列的值为eq_ref:表示使用的是唯一性索引

type值的优先级(主要是下面几种)(重要) 

system>const>eq_ref>ref>range>index>all

在生产中sql调优在eq_ref>ref>range之间(重要) 
  • possible_keys列表示mysql提示可能会使用的索引
  • key列:表示mysql真正使用的索引(重要)  
  • key_len:索引的长度,相同索引级别(type的值),值越小越好
  • rows:表示查询的行数(使用索引可定查询的行数越小越好)
  • Extra列重点关注一下几个值 (重要) 

        Extra列中含有Using filesort(俗称外排就是没有按照你建立的索引顺序执行必须要优化)

        Extra列中含有Using temporary:使用临时表保存中间结果,mysql在查询排序的时候使用的是临时表排序,常见于order by ,和group by(必须要优化)

          面试mysql之SQL优化总结一:索引的使用_第2张图片

       Extra列中含有Using index:(重要,知道含义) 

            表示相应select操作使用了覆盖索引(Covering index),避免访问了表的数据行,效果非常不错!!!!

             如果同时出现Using where 表示索引被用来执行了索引键值的查找

             如果没有出现Using where 表示索引被用来执行读取数据而非执行数据的查找

      覆盖索引Covering index:指的是selectd的数据列只用从索引列中就能读取,不必读取数据行(白话就是查询的列就是建立索引中的列

 

 

 

 

 

你可能感兴趣的:(mysql)