mysql模糊查询索引失效问题及解决方案
我们在使用like %通配符时常常会引起索引失效的问题。
这里,我们讨论一下like使用%的几种情况:
下列例子用到的索引(VC_STUDENT_NAME)
一、like ‘xx%’
EXPLAIN select * from t_student where VC_STUDENT_NAME like ‘王%’
我们发现使用%不放在开头的时候,索引是有效的
二、like ‘%xx’
EXPLAIN select * from t_student where VC_STUDENT_NAME like ‘%王’
我们发现%放在开头时,索引便失效了。
上述两个例子说明,在使用通配符时,%放在开头会引起索引失效。
但在现实问题里,往往需要把%放在开头作模糊匹配。这是我们可以通过覆盖索引的方式即索引覆盖查询,来解决索引失效的问题。
EXPLAIN select * from t_student where VC_STUDENT_NAME like ‘%王’
把查询列换成索引与之相应的列,索引失效问题得以解决。