如题 请问mysql 为什么like不走索引,全部模糊查询,为何前面不模糊就可以走索引。
让你设计like的索引,你怎么设计?
这个问题可能你没有思路,这么问吧:
让你编一本英文字典(英文字典的单词可以看成字符串吧),你怎么编目录(目录可以看成索引吧)
是不是只能是以字母A开头的,以字母B开头的,这么编。
如果说把一个单词里包含某个子字符串的都变成索引。比如a ab abo abou about b bo bou bout o ou out u ut t都作为about这个单词的索引,你算算,这个索引有多少
是不是比单词总数还多很多很多?一本字典如果正文只有500页,其中目录有1万页,你查单词还用先查目录么?
那么就没有别的索引了?
有的,这个叫做全文索引。我们可以把单词拆开来,把其中的一部分(词根、词缀)作为索引,市面上有很多词根为索引的字典啊。
这个在mysql里面也有,用的就是类似的倒排索引的算法。
索引最左匹配 最左前缀原则 不懂原理都可以用mysql查询优化器xxx解释o^o
这种 like "xxxx%"还是可以走锁的吧
最左匹配原则,如果最左侧字符就为%,基本无法匹配索引。但并不是一定不走索引,like'%---'某些情况下也可以走索引(例如select 后查询的字段包含在覆盖索引中时)
mysql的规则,百分号写在最右边,索引不会失效。具体原因,建议你看看某机构老师讲解的mysql高级优化,里面讲的非常详细
https://download.csdn.net/download/qq_34872748/10910900
想要模糊查询的话可以使用locate()方法代替的,这个不会导致索引失效