暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在 Oracle 数据库中,关于索引的描述,下列哪一项是正确的?

小伙 2025-04-25
151

在 Oracle 数据库中,关于索引的描述,下列哪一项是正确的? 

A 创建索引会减少表的存储空间占用。

 B 所有列都适合创建索引,因为索引总是能提升查询效率。 

C 组合索引(Composite Index)的列顺序对查询性能没有影响。 

D 索引可以提高查询速度,但可能降低插入、更新和删除操作的性能。


在 Oracle 数据库中,关于索引的正确描述是:

D. 索引可以提高查询速度,但可能降低插入、更新和删除操作的性能。

解析:

  1. 索引的核心作用与代价
    索引通过减少全表扫描次数、利用 B树或位图等数据结构快速定位数据行,显著提升查询效率(尤其是 WHERE 条件、JOIN、ORDER BY 等场景)。然而,每次插入、更新或删除数据时,Oracle 需要同步维护索引结构(如调整 B树节点或更新位图),这会增加 I/O 和 CPU 开销,导致 DML 操作变慢。例如,频繁更新的 OLTP 系统若创建过多索引,可能引发严重的锁争用问题。

  2. 错误选项分析
    • A. 错误:索引是独立于表的物理存储对象,需要占用额外空间(例如 B树的分支块和叶块、位图的二进制矩阵)。索引越多,表的总存储需求反而越大。
    • B. 错误:并非所有列都适合创建索引。例如:
    ◦ 低基数列(如性别、状态)更适合位图索引而非 B
    树索引,且在 OLTP 系统中位图索引会因频繁更新导致性能下降。
    ◦ 频繁修改的列小表(如几百行数据)全表扫描更快,建索引反而浪费资源。
    • C. 错误:组合索引的列顺序直接影响查询性能。Oracle 遵循最左前缀原则,即查询条件必须包含组合索引的最左侧连续列才能命中索引。例如,组合索引 (A, B) 对 WHERE A=1 有效,但对 WHERE B=2 无效。

  3. 索引的适用场景与优化建议
    • 应建索引的场景:高频查询列、主键/唯一约束列、多表连接条件列、排序/分组列。
    • 避免滥用索引:定期检查未使用的索引(通过 DBA_INDEXES 或 v$object_usage),删除冗余索引以减少维护成本。
    • 特殊索引类型选择
    ◦ 函数索引:适用于 WHERE 条件含函数(如 UPPER(name))的场景。
    ◦ 反向键索引:分散序列主键的热点块争用。

结论:

选项 D 准确概括了索引的双刃剑特性,其他选项均存在事实性错误。合理设计索引需权衡查询性能与 DML 开销,结合数据分布、业务场景和索引类型综合决策。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论