mysql中like何时使用索引

原因(cause)

生产环境有个sql查询,我自己查询挺慢的,但是我又看了下表,查询的字段是有索引的,所以我在奇怪,拿出log的日志

select * from table where a like '%xxx%'

本文介绍

本文主要解决在sql中使用like,不触发索引,探讨怎么使like下使用索引

探讨过程

当sql中使用like关键字进行查询数据,这个时候所进行like的字段在部分情况下是无法使用到数据的索引的

select * from table where a like '%xxx%'

图片

这时索引a是存在的,但是在explain后type为all,至此a索引完全没用上

那既然like ‘%xxx%’不行,我们试一下’%xxx’

select * from table where a like 'xxx%'

图片

这时还是没有使用到了索引a,那我们再换一下,试一下’xxx%’

图片

这时使用到了a的索引

所以当使用like时,如果想要使用索引通过 like ‘xxx%’,可以使用该字段的索引

如上所述,如果想要使用索引所使用的方式无法完成我们想要完成的。此时可以通过

LOCATE(’substr’,str,pos),FIND_IN_SET(str1,str2)

##总结
like 需要使用索引必须是 ‘xxx%’,LOCATE,FIND_IN_SET均可完成like模糊查询,
速度上这2个比用 like 稍快了一点。(不过这2个函数都不能使用索引)

参考文章

https://blog.csdn.net/sinat_41780498/article/details/83024781
http://www.cnblogs.com/tommy-huang/p/4483583.html