2

我正在研究Oracle 12c数据库。我有一张桌子被查询了很多。一个查询在 where 子句中使用列 A 和 B,另一个查询在 where 子句中使用 A、B、C、D 和 E 列。我想加快查询速度。

我添加了 2 个非唯一索引,一个在A & B上,一个在A & B & C & D & E上,所以我的第二个索引实际上包括第一个索引列。这是正确的吗?技术错误?还是视情况而定?

在这种情况下,在不同列上查询表时,索引的最佳实践是什么?指数有什么影响?

4

1 回答 1

4

在这种情况下,不需要索引 (A,B),因为您有索引 (A,B,C,D,E)。查询可以有效地使用索引的前导部分。由于必须维护索引,因此索引将对 DML(索引、更新、删除)产生影响。

话虽如此,优化器可能会选择不使用索引并执行全表扫描,因为它更便宜 - 这是正常的,正确的行为。例如,如果我的表有 100 万行,而我的查询返回其中的 50%,那么进行全表扫描可能会比使用索引更好。

于 2017-02-09T14:31:34.370 回答