目前,我正在做一些测试,我注意到以下几点:为什么选择比非索引列更快的pk列?
select field1 from table1
会导致成index fast full scan
当field1
是主键,从而以较低的成本(在我的情况下,它是)而
select field2 from table1
会导致成table access full
(有没有约束,也没有指数field2
,然而,即使有正规指数结果是一样的),与费用为。
我知道在JOIN/WHERE子句中涉及索引/约束时的增益,但在我的情况下没有任何过滤:我不明白为什么PK应该更快,因为,无论如何,I正在检索全部的行...
是因为唯一性吗?汤姆说,一个unique index is the same as a conventional index, structurally,这真的让我想知道为什么选择PK将比其他任何列成本低。
感谢您的启示:-)
rgds。
我明白了,谢谢。所以你的意思是说,任何非空列,没有索引,应该给我和我在例子中使用的简单选择的上下文中的PK选择一样的好结果? – Sebas
@Sebas - 如果该列被声明为'NOT NULL'并且该列上有索引,则您应该获得相同的性能,因为Oracle可以通过从索引中读取数据而不需要击中表来满足查询。 –
我仍然感到困惑,因为索引没有加载到内存或类似的东西中,如果行被索引或者没有索引,如何返回所有行更快?如果我们必须分类,请加入...好吧,但只是检索数据,残酷地说,它是如何变得更快? – Sebas