表结构:
image.png
建立的索引语句为:
alter table staffs add index idx_nap(name, age, pos);
两个sql语句执行计划如下:
type
type显示的是访问类型,访问类型表示我是以何种方式去访问我们的数据,最容易想的是全表扫描,直接暴力的遍历一张表去寻找需要的数据,效率非常低下,访问的类型有很多,效率从最好到最坏依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
ref
显示索引的哪一列被使用了,如果可能的话,是一个常数
extra
包含额外的信息。
—————————————————————————————————————
1.从type的类型可以看出 age>23的sql效率比pos>23的效率低下
2.从ref可以看出age>23的ref为NULL而pos>23的ref为const
3.从Extra可以看出两个语句都用了索引
sql1:age>23
这是因为走了最左前缀匹配原则,走的是name,age索引,name索引的type是ref,而age的索引的type是range,所以整个sql的tpye是range。
sql2:pos>23
只走了name索引,所以sql的type为ref,效率比sql1高。见下图即可
image.png
网友评论