包含另一个索引的所有列的 Oracle 索引,正确或错误
Oracle index containing all columns of another index, right or wrong
我正在处理 Oracle 12c
数据库。
我有一个 table 经常被查询。一个查询在 where 子句中使用列 A 和 B,另一个查询在 where 子句中使用 A、B、C、D 和 E 列。我想加快查询速度。
我添加了 2 个非唯一索引,一个在 A & B 上,一个在 A & B & C & D & E,所以我的第二个索引实际上包括第一个索引列。这是正确的吗?技术错误?或者视情况而定?
在这种情况下,在不同的列上查询 table,索引的最佳做法是什么?索引有什么影响?
在这种情况下,不需要索引 (A,B),因为您有一个索引 (A,B,C,D,E)。查询可以有效地使用索引的前导部分。由于必须维护索引,因此索引将对DML(索引、更新、删除)产生影响。
话虽如此,优化器可能会选择不使用索引并执行完整的 table 扫描,因为它更便宜 - 这是正常、正确的行为。例如,如果我的 table 有 100 万行,而我的查询 returns 占其中的 50%,那么进行完整的 table 扫描可能比使用索引更好。
我正在处理 Oracle 12c
数据库。
我有一个 table 经常被查询。一个查询在 where 子句中使用列 A 和 B,另一个查询在 where 子句中使用 A、B、C、D 和 E 列。我想加快查询速度。
我添加了 2 个非唯一索引,一个在 A & B 上,一个在 A & B & C & D & E,所以我的第二个索引实际上包括第一个索引列。这是正确的吗?技术错误?或者视情况而定?
在这种情况下,在不同的列上查询 table,索引的最佳做法是什么?索引有什么影响?
在这种情况下,不需要索引 (A,B),因为您有一个索引 (A,B,C,D,E)。查询可以有效地使用索引的前导部分。由于必须维护索引,因此索引将对DML(索引、更新、删除)产生影响。
话虽如此,优化器可能会选择不使用索引并执行完整的 table 扫描,因为它更便宜 - 这是正常、正确的行为。例如,如果我的 table 有 100 万行,而我的查询 returns 占其中的 50%,那么进行完整的 table 扫描可能比使用索引更好。