Skip to content

面试速答(先看这里)

**一句话结论:**使用 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来进行索引查询。

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