一、组合索引
组合索引是创建索引时至少有两列添加索引,创建组合索引时实际上是创建了多个索引。
1、 创建并查看组合索引语句
create index mul_index on test(proposalno,startdate);
show index from test;
2、最左前缀
当执行以下执行计划时
explain select * from test where proposalno='' and startdate='';
type是ref级别,key=mul_index,应用到了索引。
当执行以下执行计划时
explain select * from test where proposalno='' ;
type是ref级别,key=mul_index,应用到了索引。
当执行以下执行计划时
explain select * from test where startdate='';
type是ALL,key=null,没有用到索引。
二、排序组合索引
先创建预想排序的字段的索引
create index enddate_index on test(enddate);
show index from test;
查看排序的执行计划
explain select * from test order by enddate;
可以都看到type=all,key=null,没有用到索引。
经分析,排序时索引失效的原因有两个:
1、排序行数过多可能导致索引失效
2、尽量不要使用*查询全部列,可能导致索引失效。要包含索引列。
根据上述原则,修改执行计划如下:
explain select enddate from test order by enddate;
可以看到type的级别是index,key=enddate_index,索引起作用了,优于之前的执行计划。
进一步也可以修改执行计划如下:
explain select policyno,enddate from test order by enddate; --policyno是主键
执行计划效果同上。