主题
面试速答(先看这里)
**一句话结论:**使用 LIKE 'xx%xxx' 时,和 LIKE 'xx%' 是一样的,他都可以用到左边的 xx 来进行索引查询。
60秒标准回答:
当使用 LIKE '%xx' 进行查询时,通配符 % 放在了字符串的前面。因为 % 表示任意字符,因此查询必须从每一行的开头开始,逐个字符进行比较,以检查是否符合 xx 结尾的条件。所以这种不符合最左前缀匹配的查询模式无法利用常规的索引
而 LIKE 'xx%' 时, % 通配符放在了字符串的后面。那么数据库可以利用索引来优化查询,来查询所有以 xx 开头的索引,这是因为索引是基于排序的,能够根据前缀值快速定位到符合条件的数据范围
使用 LIKE 'xx%xxx' 时,和 LIKE 'xx%' 是一样的,他都可以用到左边的 xx 来进行索引查询
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**当使用 LIKE '%xx' 进行查询时,通配符 % 放在了字符串的前面。
- **要点2:**而 LIKE 'xx%' 时, % 通配符放在了字符串的后面。
- **要点3:**这就像你要去图书馆查一本书,图书馆的书都是按照名称排序的,你知道你要找的书的第一个字,那么你就可以到和第一个字一样的书架上去直接查找。
**记忆锚点:**LIKE → xxx → 左前缀匹配的查询模式 → 无法利用常规的索引 → 开头的索引 → like
加分表达:
- 那么数据库可以利用索引来优化查询,来查询所有以 xx 开头的索引,这是因为索引是基于排序的,能够根据前缀值快速定位到符合条件的数据范围。
- 但是如果你只知道最后两个字,那你就只能从头到尾全都看一遍。
追问准备:
- 围绕「LIKE」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「xxx」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「左前缀匹配的查询模式」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
当使用 LIKE '%xx' 进行查询时,通配符 % 放在了字符串的前面。因为% 表示任意字符,因此查询必须从每一行的开头开始,逐个字符进行比较,以检查是否符合 xx 结尾的条件。所以这种不符合最左前缀匹配的查询模式无法利用常规的索引。
而 LIKE 'xx%'时,% 通配符放在了字符串的后面。那么数据库可以利用索引来优化查询,来查询所有以xx开头的索引,这是因为索引是基于排序的,能够根据前缀值快速定位到符合条件的数据范围。
使用 LIKE 'xx%xxx'时,和LIKE 'xx%'是一样的,他都可以用到左边的xx来进行索引查询。
这就像你要去图书馆查一本书,图书馆的书都是按照名称排序的,你知道你要找的书的第一个字,那么你就可以到和第一个字一样的书架上去直接查找。但是如果你只知道最后两个字,那你就只能从头到尾全都看一遍。