mysql怎么让左模糊查询也能走索引?

测试表USER_INFO表数据以及结构如下:
mysql怎么让左模糊查询也能走索引?_第1张图片
有一个USER_NAME字段的索引:
在这里插入图片描述

有个业务需求,需要模糊搜索出用户名后几位有杰这个词的所有用户信息,这时候不可能说为了一个搜索就引入ES,但是如果sql使用左模糊查询的话,根据索引的最左匹配原则,该sql语句是不可能使用到idx_user_name索引的,如下:

EXPLAIN SELECT * from USER_INFO where USER_NAME like '%杰'

执行计划如下:
在这里插入图片描述
可以发现是用不到索引的。

需要做模糊匹配,又要用到索引,索引的最左匹配原则更是不能被打破,这时候可以增加一个字段,这个字段的内容等于USER_NAME字段内容的反转,同时加上这个字段的相关索引,如下:
mysql怎么让左模糊查询也能走索引?_第2张图片
在这里插入图片描述
此时如果是要模糊搜索出用户名后几位有杰这个词的所有用户信息,可以对REVERSE_USER_NAME字段做右模糊查询,效果其实就是和对USER_NAME字段做左模糊查询是一样的,因为二者的内容是相反的,结果如下:

SELECT * from USER_INFO where REVERSE_USER_NAME like '杰%'

执行计划如下:
在这里插入图片描述

总结

索引的最左匹配原则不能打破,那么要让左匹配也走索引的话,换个思路,让右匹配的效果和左匹配一样就好了,同时右匹配又能走索引,间接达到了左模糊查询也能走索引的目的。

你可能感兴趣的:(Java开发)