索引如何影响查询性能?


12

显然,保留几个不同的索引会对插入和删除性能产生负面影响。查询性能如何:在一个表上保留太多索引完全有意义吗?在任何情况下添加索引都会提高查询性能(当然,对于使用索引的查询而言)还是会因为索引过多而降低查询性能,因为有必要查询所有索引以获取索引。结果?

如果表上有不同的索引:是否会全部考虑这些索引,或者从优化程序的角度来看仅是最佳索引?Oracle是否实现多维索引?


2
您为什么不测试一下,然后报告结果呢?:)
Neil McGuigan

我明天会做:)
paweloque 2011年

2
索引不一定会减慢删除速度,它们也可以加快删除速度(就像更新可以利用索引一样)
a_horse_with_no_name 2011年

@el Chief重新发明轮子有什么意义?因此,是的,尽管我们确定插入/删除会受到影响,但查询性能的影响值得怀疑。更新如何?他们会受到负面影响吗?
Sangram

Answers:


15

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

Oracle概念指南》提供了创建索引的标准。

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

  • 经常查询索引的列,并返回表中总行数的一小部分。

  • 一个或多个索引列上存在引用完整性约束。索引是避免完全表锁定的一种方法,如果您更新了父表的主键,合并到父表中或从父表中删除,则可能会需要该索引。

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

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


7

只要您的统计信息是最新的,基于成本的优化器就应该对使用哪些索引做出明智的决策。如果不是,那是时候使用hints了。它将永远不会查询不需要满足查询条件的列上的索引。


0

我在《应用程序开发人员指南》的“ 选择索引策略”中找到了这一点。该页面关于“选择索引策略”:

限制每个表的索引数

索引越多,更改表的开销就越大。插入或删除行时,必须更新表上的所有索引。更新列时,必须更新列上的所有索引。

您必须权衡查询索引的性能优势与更新的性能开销。例如,如果一个表主要是只读的,则可以使用更多的索引。但是,如果一个表被大量更新,则可以使用更少的索引。


2
来自以下问题:“显然保留几个不同的索引会对插入和删除性能产生负面影响。查询性能如何”
杰克说尝试topanswers.xyz 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.