MySql使用索引和不使用索引的几种情况

索引是优化sql查询速度的重要优化方式,但是在存在索引时,有一些情况会使用索引,有一些情况下不会使用索引。
使用索引的情况如下:
1.对索引进行全值匹配,例如一个组合索引包括3列,当查询语句中出现indexA=A and indexB=B and indexC=C这样的语句时,会使用索引。
2.对B-Tree索引进行范围匹配,当索引类型为B—Tree索引时,类似于indexA > A and indexA < a 时,会使用索引,HASH索引不适用与范围匹配。
3.对组合索引,符合最左前缀原则,当索引为组合索引时, 比如ix_index(col1,co2,col3)的组合索引,当等值查询为col1,(col1+col2),(col1+col2+col3)时可以使用索引,类似于(col2+col3)这类不会使用索引。
4.仅仅对索引列进行查询时会使用索引。
5.匹配列前缀,仅仅对组合索引第一列并且对第一列的最左一部分进行查找。
6.对索引列进行精确匹配,其他列范围匹配。
7.如果某列是索引列,使用column_name is null时会使用索引。
不会使用索引的情况如下:
1.以%开头的LIKE查询不会使用B-TREE索引。
2.数据类型出现隐式转换时不会使用索引。比如某列是varchar类型当查询语句为:column_name = 1时不会使用索引,而查询语句为:column_name = ‘1’时可以使用索引。
3.不符合最左前缀原则
4.如果查询条件有or分割,or前面的使用索引,or后面的未使用索引,则不会使用索引。因为即使or之前的使用了索引,但是or之后的也需要全表查询,索引就忽略索引,直接全表查询。
5.如果MySql认为使用索引会比全表查询更慢,则不会使用索引。

你可能感兴趣的:(数据库)