目录
2.删除一个表中指定的索引(删除一个表中的所有索引方法暂时没有找到,有说用存储函数的以后试试)
以customer表为例
1.查看一个表中的所有索引
show index from customer;
2.删除一个表中指定的索引(删除一个表中的所有索引方法暂时没有找到,有说用存储函数的以后试试)
drop index FK_cst_customer_industry on customer;
3.查看表中索引的执行计划
explain select * from customer;
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(必须要优化)
Extra列中含有Using index:(重要,知道含义)
表示相应select操作使用了覆盖索引(Covering index),避免访问了表的数据行,效果非常不错!!!!
如果同时出现Using where 表示索引被用来执行了索引键值的查找
如果没有出现Using where 表示索引被用来执行读取数据而非执行数据的查找
覆盖索引Covering index:指的是selectd的数据列只用从索引列中就能读取,不必读取数据行(白话就是查询的列就是建立索引中的列)