Oracle中的索引

时间:2011-02-24 19:20:36

标签: oracle indexing

与往常一样,如果这是一个愚蠢的问题我会道歉(实际上是两个问题)。我不是DBA,所以我对索引知之甚少。我的问题是:

  1. 是否存在索引毫无意义的截止点(就行数而言)?例如,对具有10-20行的查找表的索引有什么好处吗?

  2. 我已经阅读了一些关于在Oracle中覆盖索引的内容,这个概念很有意义,因为可以直接从索引中检索数据,并且不需要访问表。如何判断索引是否为覆盖索引?这是创建索引时的值,还是默认情况下基于索引包含的行?

  3. 我希望这是有道理的。

2 个答案:

答案 0 :(得分:10)

Richard Foote在indexes for small tables上发布了一系列博客文章。简短的回答可能不是(但是答案很长很有趣)。

覆盖索引是索引的通用术语,该索引包含属于表的SELECT列表或WHERE子句的所有列。它不是索引的属性 - 任何索引都可以是某个查询的覆盖索引。它是特定于查询和优化程序可用的索引的东西。

答案 1 :(得分:3)

  1. 可以将小表创建为“面向索引的表”,在这种情况下,表和索引在存储中是相同的“对象”。我认为物联网需要一把主键。在IOT可用之前,它在很多情况下都是判断。当然,如果索引几乎与表格一样大或者更大,那么除非它被用来强制执行唯一性,否则它是无用的。

    another Richard Foote link

  2. 您必须查看正在运行的查询并将其与索引进行比较。 (A, B)的索引涵盖:

    从T中选择B,其中A = 3