数据库系统工程师 · 高频练习

LIKE '%关键词' 为什么可能导致索引难以使用?

中级 单选题 第 480 题 中等 数据库系统工程师LIKE 查询前置通配符B+树索引索引使用
题目

某表在 `name` 字段上建立了普通 B+ 树索引。查询 `WHERE name LIKE 'abc%'` 时,可以从索引有序前缀定位范围;但查询 `WHERE name LIKE '%abc'` 或 `LIKE '%abc%'` 时,优化器可能无法有效利用该索引。主要原因是()。

A 前置通配符使查询无法从索引有序前缀开始定位范围
B LIKE 语句一定不能使用任何索引
C B+ 树索引只用于备份文件,不能用于查询
D 索引会自动删除所有包含 abc 的记录
题目类型:原创高频考点题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
书木兰刷题练习 适合懒人、小白的刷题通关平台
正确答案
A
答案解析

普通 B+ 树索引按照字段值有序排列,适合从确定的前缀开始定位范围。例如 `abc%` 可以理解为以 abc 开头的一段连续范围。但 `%abc` 或 `%abc%` 前面没有固定前缀,数据库很难从索引开头直接跳到目标范围,往往需要扫描更多索引项甚至全表扫描。实际数据库是否完全不走索引还取决于优化器、统计信息和索引类型,但软考题通常考的是前置通配符会削弱普通索引的直接定位能力。

选项分析

A

正确。前置通配符破坏了从索引有序前缀开始定位的条件。

B

错误。`LIKE 'abc%'` 这类前缀匹配在很多场景下仍可能利用普通索引。

C

错误。B+ 树索引正是数据库中常见的查询加速结构,不是备份文件。

D

错误。索引用于定位和访问数据,不会因为查询条件自动删除记录。

本题为什么容易错

这题常见误区是背成“LIKE 一定不走索引”。更准确的说法是:前缀明确的 LIKE 更有机会用索引,前面带 `%` 的模糊匹配往往难以利用普通 B+ 树索引。考试喜欢考这种细节差别。

先看结论

简短答案

LIKE '%关键词' 为什么可能导致索引难以使用,正确答案是 A(前置通配符使查询无法从索引有序前缀开始定位范围)。普通 B+ 树索引按照字段值有序排列,适合从确定的前缀开始定位范围。例如 `abc%` 可以理解为以 abc 开头的一段连续范围。但 `%abc` 或 `%abc%` 前面没有固定前缀,数据库很难从索引开头直接跳到目标范围,往往需要扫描更多索引项甚至全表扫描。实际数据库是否完全不走索引还取决于优化器、统计信息和索引类型,但软考题通常考的是前置通配符会削弱普通索引的直接定位能力。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
前置通配符使查询无法从索引有序前缀开始定位范围 本题正确答案 正确。前置通配符破坏了从索引有序前缀开始定位的条件。 看到题干核心场景时优先联想到它
LIKE 语句一定不能使用任何索引 本题干扰项 错误。`LIKE 'abc%'` 这类前缀匹配在很多场景下仍可能利用普通索引。 看到该词不要急着选,先判断是否真正解决题干问题
B+ 树索引只用于备份文件,不能用于查询 本题干扰项 错误。B+ 树索引正是数据库中常见的查询加速结构,不是备份文件。 看到该词不要急着选,先判断是否真正解决题干问题
索引会自动删除所有包含 abc 的记录 本题干扰项 错误。索引用于定位和访问数据,不会因为查询条件自动删除记录。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • LIKE 语句一定不能使用任何索引:错误。`LIKE 'abc%'` 这类前缀匹配在很多场景下仍可能利用普通索引。
  • B+ 树索引只用于备份文件,不能用于查询:错误。B+ 树索引正是数据库中常见的查询加速结构,不是备份文件。
  • 索引会自动删除所有包含 abc 的记录:错误。索引用于定位和访问数据,不会因为查询条件自动删除记录。
复习

知识点详解

LIKE 查询是数据库系统工程师考试中需要结合场景理解的考点。围绕“LIKE '%关键词' 为什么可能导致索引难以使用”这类题目,复习时要先看题干描述的是概念定义、适用场景、作用效果,还是与其他选项的区别。本题的题干关键词是“某表在 `name` 字段上建立了普通 B+ 树索引。查询 `WHERE name LIKE 'abc%'` 时,可以从索引有序前缀定位范围;但查询 `WHERE name LIKE '%abc'` 或 `LIKE '%abc%'` 时,优化器可能无法有效利用该索引。主要原因是()”,它指向的核心答案是 A(前置通配符使查询无法从索引有序前缀开始定位范围)。

备考速记

备考速记:题干如果强调“索引使用”中的关键目标,就先联想到 LIKE 查询;如果选项里出现 LIKE 语句一定不能使用任何索引、B+ 树索引只用于备份文件,不能用于查询、索引会自动删除所有包含 abc 的记录,不要只看名称熟悉,要判断它们是否真正对应题干场景。

LIKE 查询 在索引使用场景中的作用

LIKE 查询在本题中的核心价值,是解决“某表在 `name` 字段上建立了普通 B+ 树索引。查询 `WHERE name LIKE 'abc%'` 时,可以从索引有序前缀定位范围;但查询 `WHERE name LIKE '%abc'` 或 `LIKE '%abc%'` 时,优化器可能无法有效利用该索引。主要原因是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出索引使用场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查LIKE 查询的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把LIKE 查询和LIKE 语句一定不能使用任何索引、B+ 树索引只用于备份文件,不能用于查询、索引会自动删除所有包含 abc 的记录放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
LIKE 查询 在数据库系统工程师软考中的考法

软考选择题通常不会只考概念定义,还会把LIKE 查询放到索引使用场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

这题先把索引想成按名字排好的一本通讯录。你要找 abc 开头的人,可以直接翻到 abc 那一段;你要找名字里任意位置包含 abc 的人,就很难靠开头顺序直接定位,只能翻很多页。老师讲 SQL 优化时常说,LIKE 不是一律慢,关键看通配符放在哪里。

考点定位

索引失效类题要看查询条件是否保留了索引列的有序前缀。`abc%` 有前缀,通常比 `%abc` 更容易利用普通 B+ 树索引。

易错提醒

  • 把 `LIKE 'abc%'` 和 `LIKE '%abc%'` 的索引使用情况混为一谈。
  • 在高频搜索框里直接使用前后通配符,又没有全文索引或搜索引擎方案。
  • 只看是否建了索引,不看执行计划和实际扫描行数。

备考提示

  • 数据库索引题可以按四类陷阱复习:函数包列、隐式转换、前置通配符、联合索引跳过前导列。
  • 如果业务确实需要任意位置关键词搜索,普通 B+ 树索引可能不是最佳方案,应考虑全文索引、倒排索引或搜索服务。
  • 看到 `LIKE 'xxx%'` 和 `LIKE '%xxx'` 同时出现,先判断有没有固定前缀。

你可能还想了解

  • LIKE '%关键词' 为什么可能导致索引难以使用?
  • LIKE 查询是什么?
  • LIKE 查询在数据库系统工程师考试中怎么考?
  • 数据库系统工程师LIKE 查询题怎么理解?
  • LIKE前置通配符为什么不走索引怎么考?
  • LIKE abc% 和 %abc% 区别怎么考?

本文小结

本题核心考点是LIKE 查询在索引使用场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(前置通配符使查询无法从索引有序前缀开始定位范围)。