在查看MYSQL执行计划的时候,有一列 key_len 表示索引中使用的字节数,我们可以用它来判断使用了几个索引,我们使用最常用的utf-8编码按如下几点可以进行判断:
1、字段类型 int为4个,date为3,datetime为4,char(n)为3n,varchar(n)为3n+2(更多字段类型自己测试下就知道了)
2、如果字段可为 null,则需要额外再加1
按如上方法计算:
char(1)可为空的情况下key_len=4,不可为空的情况下key_len=3
varchar(100)可为空的情况下key_len=302,不可为空的情况下key_len=302+1=303
再假设一个字段char(1) not null 和一个字段int not null 进行了组合索引,那么当你写的SQL的执行计划中的 key_len=3+4=7 时,则可以说明这2个字段在这个SQL查询中都使用了索引。
所以我们就可以根据执行计划中的 key_len 的长度来判断使用了几个索引了。
补充:
possible_keys:显示当前SQL可能应用到的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将会被列出,但不一定被当前查询实际使用。
key:实际使用的索引,若为null,则没有使用到索引。(可能因为 ①没建立索引;②建立了索引但没有使用上)。查询中若使用了覆盖索引,则该索引仅出现在key列表中。
(END)