索引
1.执行计划各个字段含义:
id: 表示查询中select子句或者操作表的顺序,id的值越大,代表优先级越高,越先执行
select_type :select的查询类型:SIMPLE,PRIMARY,SUBQUERY,DERIVED,UNION,UNION REUSLT
table: 表名
partitions:查询的分区信息
type:查询时的类型 11种
*system:表有且仅有一条记录
*const:查询时命中主键或者unique唯一索引,或者被连接的部分是一个const
*eq_ref:查询时命中主键或unique key
*ref:查询时使用非唯一索引
*ref_or_null:使用非唯一索引并且包含null
*index_merge:使用了索引合并优化,查询使用了两个以上的索引,查询如果出现索引合并,往往可以考虑使用联合索引
*unique_subquery:子查询返回不重复集合
*index_subquery:子查询返回重复值
*range:在索引上进行范围选择
*index:遍历索引树读取
*all:全表扫描
possible_keys:可能使用的索引
key:实际使用的索引
key_len:索引长度字节数
ref: const,func,null,字段名
rows:估算找到所需记录需要读取的行数
filtered:符合条件的记录数据量的比例
extra:6+2种
using index 使用了覆盖索引,即从辅助索引即获得了所有信息
using where:没有使用索引,通过where来进行条件过滤
using temporary:使用临时表存储,一般在排序或者分组查询时用到
using filesort:表示无法利用索引完成的排序操作
using join buffer:连表查询时,连接条件没有使用索引,需要有一个连接缓冲区来存储结果
impossible where: 使用了不正确的where
no table user: 没有使用 from子句
2.聚簇索引和非聚簇索引
聚簇索引
特点:1.能够快速的访问针对范围值的查询;2.它对于主键的排序查找和范围查找非常快
非聚簇索引
特点:不包含行记录的全部数据,索引行中包含一个书签,根据书签去innodb中查找相应行
3.Cardinality值:索引中唯一数目的估计值 观察索引的高选择性
cardinality值的更新:
1.表中1/16的数据已经发生变化
2.stat_modified_counter >2000000000
cardinality值的获取:对表中8个叶节点进行采样,然后进行预估
- 联合索引
使用联合索引的时机:需要多个查询条件
好处:对多个键值进行了排序,可以避免排序操作
5.index_merge
6.优化器不适用索引的情况
辅助索引的范围查找无法进行索引覆盖
7.mysql索引优化和查询优化
MRR优化 Using MRR 辅助索引->主键排序->减少页面替换
ICP优化 Using index condition 在根据索引查找是进行where条件判断