✅为啥 like %xx不走索引?like xx%xxx走索引吗?为啥?

✅为啥 like %xx不走索引?like xx%xxx走索引吗?为啥?

典型回答

当使用 LIKE '%xx' 进行查询时,通配符 % 放在了字符串的前面。因为% 表示任意字符,因此查询必须从每一行的开头开始,逐个字符进行比较,以检查是否符合 xx 结尾的条件。所以这种不符合最左前缀匹配的查询模式无法利用常规的索引。

LIKE 'xx%'时,% 通配符放在了字符串的后面。那么数据库可以利用索引来优化查询,来查询所有以xx开头的索引,这是因为索引是基于排序的,能够根据前缀值快速定位到符合条件的数据范围。

使用 LIKE 'xx%xxx'时,和LIKE 'xx%'是一样的,他都可以用到左边的xx来进行索引查询。

这就像你要去图书馆查一本书,图书馆的书都是按照名称排序的,你知道你要找的书的第一个字,那么你就可以到和第一个字一样的书架上去直接查找。但是如果你只知道最后两个字,那你就只能从头到尾全都看一遍。