在 Oracle 数据库中,关于索引的描述,下列哪一项是正确的?
A 创建索引会减少表的存储空间占用。
B 所有列都适合创建索引,因为索引总是能提升查询效率。
C 组合索引(Composite Index)的列顺序对查询性能没有影响。
D 索引可以提高查询速度,但可能降低插入、更新和删除操作的性能。
在 Oracle 数据库中,关于索引的正确描述是:
D. 索引可以提高查询速度,但可能降低插入、更新和删除操作的性能。
解析:
索引的核心作用与代价
索引通过减少全表扫描次数、利用 B树或位图等数据结构快速定位数据行,显著提升查询效率(尤其是 WHERE 条件、JOIN、ORDER BY 等场景)。然而,每次插入、更新或删除数据时,Oracle 需要同步维护索引结构(如调整 B树节点或更新位图),这会增加 I/O 和 CPU 开销,导致 DML 操作变慢。例如,频繁更新的 OLTP 系统若创建过多索引,可能引发严重的锁争用问题。错误选项分析
• A. 错误:索引是独立于表的物理存储对象,需要占用额外空间(例如 B树的分支块和叶块、位图的二进制矩阵)。索引越多,表的总存储需求反而越大。
• B. 错误:并非所有列都适合创建索引。例如:
◦ 低基数列(如性别、状态)更适合位图索引而非 B树索引,且在 OLTP 系统中位图索引会因频繁更新导致性能下降。
◦ 频繁修改的列或小表(如几百行数据)全表扫描更快,建索引反而浪费资源。
• C. 错误:组合索引的列顺序直接影响查询性能。Oracle 遵循最左前缀原则,即查询条件必须包含组合索引的最左侧连续列才能命中索引。例如,组合索引(A, B)对WHERE A=1有效,但对WHERE B=2无效。索引的适用场景与优化建议
• 应建索引的场景:高频查询列、主键/唯一约束列、多表连接条件列、排序/分组列。
• 避免滥用索引:定期检查未使用的索引(通过DBA_INDEXES或v$object_usage),删除冗余索引以减少维护成本。
• 特殊索引类型选择:
◦ 函数索引:适用于 WHERE 条件含函数(如UPPER(name))的场景。
◦ 反向键索引:分散序列主键的热点块争用。
结论:
选项 D 准确概括了索引的双刃剑特性,其他选项均存在事实性错误。合理设计索引需权衡查询性能与 DML 开销,结合数据分布、业务场景和索引类型综合决策。




