mysql like 索引问题

下面使用的mysql官方测试库测试

当索引是字符型且是主键时:

departments表:

可以看到,只有d后面有%时,type是range也就是索引范围查询,通过索引字段范围获取表中部分数据记录。

当d前面有%时,走的是全索引扫描,和ALL类型类似,只不过ALL类型是全表扫描,而index类型则仅仅扫描所有的所有,而不扫描数据。

当索引是字符型表中只有索引字段与主键时,结果与上面相同。

当索引是字符型,表中存在非索引字段时:

测试表:test_table

 

可以看到,当d前面没有%时,type是range也就是索引范围查询,通过索引字段范围获取表中部分数据记录。

当d前面有%时,type是all,即扫描全表,这个类型是查询性能最差的查询之一,这样的查询在数据量大的情况下,随数据库的性能是灾难级的。 这里之所以是all不是index,是因为name字段不存在于value的索引树上,导致了扫表。

当索引是非字符型时:

employees表:

无论%加在哪都会进行扫表,type为All,这里因为主键是数字型,查询条件是字符型,数据类型不匹配所以没法通过索引查询

猜你喜欢

转载自blog.csdn.net/qq_37113604/article/details/88990524