下面使用的mysql官方测试库测试
当索引是字符型且是主键时:
departments表:
可以看到,只有d后面有%时,type是range也就是索引范围查询,通过索引字段范围获取表中部分数据记录。
当d前面有%时,走的是全索引扫描,和ALL类型类似,只不过ALL类型是全表扫描,而index类型则仅仅扫描所有的所有,而不扫描数据。
当索引是字符型表中只有索引字段与主键时,结果与上面相同。
当索引是字符型,表中存在非索引字段时:
测试表:test_table
可以看到,当d前面没有%时,type是range也就是索引范围查询,通过索引字段范围获取表中部分数据记录。
当d前面有%时,type是all,即扫描全表,这个类型是查询性能最差的查询之一,这样的查询在数据量大的情况下,随数据库的性能是灾难级的。 这里之所以是all不是index,是因为name字段不存在于value的索引树上,导致了扫表。
当索引是非字符型时:
employees表:
无论%加在哪都会进行扫表,type为All,这里因为主键是数字型,查询条件是字符型,数据类型不匹配所以没法通过索引查询