目前,我正在做一些測試,我注意到以下幾點:爲什麼選擇比非索引列更快的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