索引如何影响查询性能?

paw*_*que 12 performance index oracle

显然,保留几个不同的索引会对插入和删除性能产生负面影响。查询性能如何:在表上保留太多索引是否有意义?在任何情况下,如果添加索引(当然对于使用索引的查询),查询性能是否会提高,或者甚至有可能因索引过多而导致查询性能下降,因为有必要查阅所有索引以获得结果?

如果表上有不同的索引:它们会被全部考虑,还是仅从优化器的角度来看是最好的?Oracle 是否实现了多维索引?

Lei*_*fel 15

当需要考虑更多索引时,生成计划所需的时间会稍长一些,但我怀疑差异是否会显着。删除索引原因没有列出查询性能。另一方面,通常您不应该创建索引,除非您知道它们将用于提高查询效率。

Oracle 概念指南 中,以下是创建索引的标准。

通常,在以下任何一种情况下,请考虑在列上创建索引:

  • 索引列被频繁查询并返回表中总行数的一小部分。

  • 索引列上存在参照完整性约束。索引是一种避免全表锁定的方法,否则在更新父表主键、合并到父表或从父表中删除时将需要全表锁定。

  • 将在表上放置唯一键约束,并且您要手动指定索引和所有索引选项。

在检查查询中表上的所有索引以确定它们是否可以使用的意义上,将考虑所有索引。那些可以被进一步检查以确定有用性。


Gai*_*ius 7

只要您的统计数据是最新的,基于成本的优化器就应该就使用哪些索引做出明智的决定。如果没有,那就是使用提示的时候了。它永远不会查询不需要满足查询的列上的索引。