某表在 `name` 字段上建立了普通 B+ 树索引。查询 `WHERE name LIKE 'abc%'` 时,可以从索引有序前缀定位范围;但查询 `WHERE name LIKE '%abc'` 或 `LIKE '%abc%'` 时,优化器可能无法有效利用该索引。主要原因是()。
普通 B+ 树索引按照字段值有序排列,适合从确定的前缀开始定位范围。例如 `abc%` 可以理解为以 abc 开头的一段连续范围。但 `%abc` 或 `%abc%` 前面没有固定前缀,数据库很难从索引开头直接跳到目标范围,往往需要扫描更多索引项甚至全表扫描。实际数据库是否完全不走索引还取决于优化器、统计信息和索引类型,但软考题通常考的是前置通配符会削弱普通索引的直接定位能力。
选项分析
正确。前置通配符破坏了从索引有序前缀开始定位的条件。
错误。`LIKE 'abc%'` 这类前缀匹配在很多场景下仍可能利用普通索引。
错误。B+ 树索引正是数据库中常见的查询加速结构,不是备份文件。
错误。索引用于定位和访问数据,不会因为查询条件自动删除记录。
本题为什么容易错
这题常见误区是背成“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(前置通配符使查询无法从索引有序前缀开始定位范围)。