gpt4 book ai didi

sql - 了解 oracle 中多个重叠索引的情况

转载 作者:行者123 更新时间:2023-12-04 22:17:13 25 4
gpt4 key购买 nike

给定 Oracle 数据库的以下索引:

CREATE INDEX subject_x1 ON subject (code);
CREATE INDEX subject_x2 ON subject (code, status);

是不是第一个索引是多余的,可以去掉。我们需要把它弄好,因为这是一张相对较大的 table ,会不断地被锤击。

任何解释或确认这一点的 oracle 文档都会非常有帮助。

最佳答案

与大多数数据库问题一样,这取决于:-)

事实上,它不应该在所有情况下都被删除。如果您有一个在 code 子句中单独使用 where 的查询,那么使用 subject_x1 的性能可能仍然优于 subject_x2,因为需要读入的索引数据更少。

一个极端的例子,假设 code 是一个 char(2)status 是一个 char(4094)`。如果您有查询:

select code from tbl where code > 'dd' and code < 'gg';

这很可能导致仅索引扫描,因为绝对没有理由去表。如果您使用 subject_x1 并从索引中读取 4K 块,则每次读取都可以引入几千个代码。

通过使用 subject_x2 ,每次读取只给你一个代码(可能是浪费状态)。这是性能上的巨大差异。

但是,我不能充分强调这一点,请衡量,不要猜测!

使用两个索引分析您的查询(和更新)以查看哪个性能更好,并使用代表性数据进行分析。如果您发现 subject_x1 为某些查询提供了更好的性能,请将其保留。它会影响更新/插入速度和存储要求,但您会发现这通常无关紧要,因为:
  • 绝大多数数据库的读取次数远多于写入次数;和
  • 大多数关于数据库的提示都与速度有关,而不是存储空间。
  • 关于sql - 了解 oracle 中多个重叠索引的情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3509747/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com