某表在 create_time 字段上建立了索引,但查询条件写成 DATE(create_time) = '2026-06-02',优化器可能无法直接利用该字段上的普通索引。主要原因是()。
普通索引通常按字段原始值建立有序结构。对索引列套用函数后,查询条件比较的是函数计算后的结果,可能无法直接利用原始字段值的索引顺序,从而导致索引失效或无法高效使用。更常见的写法是改成范围查询,例如 create_time >= '2026-06-02' AND create_time < '2026-06-03'。
选项分析
正确。函数作用在索引列上,可能破坏普通索引的直接匹配条件。
错误。索引用于加速数据检索,不是保存图片。
错误。WHERE 是 SQL 查询中常见过滤条件。
错误。时间字段可以建立索引,关键看查询写法。
本题为什么容易错
这题容易错在以为“建了索引就一定快”。索引能不能用上,还取决于 SQL 条件是否保留了索引列的可搜索性。
简短答案
为什么在索引列上使用函数可能导致索引失效,正确答案是 A(对索引列使用函数后,原索引顺序可能无法直接用于匹配条件)。普通索引通常按字段原始值建立有序结构。对索引列套用函数后,查询条件比较的是函数计算后的结果,可能无法直接利用原始字段值的索引顺序,从而导致索引失效或无法高效使用。更常见的写法是改成范围查询,例如 create_time >= '2026-06-02' AND create_time < '2026-06-03'。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 对索引列使用函数后,原索引顺序可能无法直接用于匹配条件 | 本题正确答案 | 正确。函数作用在索引列上,可能破坏普通索引的直接匹配条件。 | 看到题干核心场景时优先联想到它 |
| 索引只能用于保存图片 | 本题干扰项 | 错误。索引用于加速数据检索,不是保存图片。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 数据库查询不能带 WHERE 条件 | 本题干扰项 | 错误。WHERE 是 SQL 查询中常见过滤条件。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 时间字段永远不允许建立索引 | 本题干扰项 | 错误。时间字段可以建立索引,关键看查询写法。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 索引只能用于保存图片:错误。索引用于加速数据检索,不是保存图片。
- 数据库查询不能带 WHERE 条件:错误。WHERE 是 SQL 查询中常见过滤条件。
- 时间字段永远不允许建立索引:错误。时间字段可以建立索引,关键看查询写法。
知识点详解
SQL优化是数据库系统工程师考试中需要结合场景理解的考点。围绕“为什么在索引列上使用函数可能导致索引失效”这类题目,复习时要先看题干描述的是概念定义、适用场景、作用效果,还是与其他选项的区别。本题的题干关键词是“某表在 create_time 字段上建立了索引,但查询条件写成 DATE(create_time) = '2026-06-02',优化器可能无法直接利用该字段上的普通索引。主要原因是()”,它指向的核心答案是 A(对索引列使用函数后,原索引顺序可能无法直接用于匹配条件)。
备考速记
备考速记:题干如果强调“查询优化”中的关键目标,就先联想到 SQL优化;如果选项里出现 索引只能用于保存图片、数据库查询不能带 WHERE 条件、时间字段永远不允许建立索引,不要只看名称熟悉,要判断它们是否真正对应题干场景。
SQL优化 在查询优化场景中的作用
SQL优化在本题中的核心价值,是解决“某表在 create_time 字段上建立了索引,但查询条件写成 DATE(create_time) = '2026-06-02',优化器可能无法直接利用该字段上的普通索引。主要原因是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出查询优化场景,判断应该选择哪个概念、工具、协议或管理过程。
- 考查SQL优化的作用,要求从四个相近选项中找出最符合题干目标的一项。
- 把SQL优化和索引只能用于保存图片、数据库查询不能带 WHERE 条件、时间字段永远不允许建立索引放在一起考,重点看适用场景是否一致。
- 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
SQL优化 在数据库系统工程师软考中的考法
软考选择题通常不会只考概念定义,还会把SQL优化放到查询优化场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
题干的题眼是 DATE(create_time)。不是说 create_time 没有索引,而是查询时先对字段做了函数处理,普通索引未必还能按原来的有序值直接匹配。用时间范围写法通常更利于索引使用。
考点定位
数据库性能题不只考会不会建索引,还考索引是否能被查询条件有效利用。函数、隐式类型转换、前置通配符等都可能影响索引使用。
易错提醒
- 不要轻易在索引列外层套函数做过滤。
- 日期按天查询常可改写成半开区间范围条件。
- 索引优化要结合执行计划判断,不能只看有没有索引。
备考提示
- 数据库系统工程师复习索引时,把最左前缀、范围查询、函数、隐式转换和 LIKE 前置通配符放在一起比较。
- 看到索引列被函数包住,要警惕索引无法直接使用。
你可能还想了解
- 为什么在索引列上使用函数可能导致索引失效?
- SQL优化是什么?
- SQL优化在数据库系统工程师考试中怎么考?
- 数据库系统工程师SQL优化题怎么理解?
- 索引列使用函数会失效吗怎么考?
- 数据库索引失效原因怎么考?
本文小结
本题核心考点是SQL优化在查询优化场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(对索引列使用函数后,原索引顺序可能无法直接用于匹配条件)。