?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
本章定義(PostgreSQL)核心系統(tǒng)和 (索引訪問方法)之間的接口,后者管理獨立的索引類型。除 了在這里聲明的東西之外,核心系統(tǒng)對索引一無所知,因此可以通過書寫累加上來的 代碼,開發(fā)一種完全新的索引類型。
PostgreSQL里的所有索引技術(shù)上都叫做 (從屬索引),也就是說,索引在物理上是與它描述的表文件分 離的。每個索引是以其自己的物理關(guān)系的方式存儲的,因此它 們也在pg_class表里面有記錄描述。一個索引的內(nèi)容是完全在其索引 訪問方法的控制之下的。實際上,所有索引訪問方法都把索引分裂成標(biāo)準(zhǔn)大小的頁面, 這樣他們就可以使用普通的存儲管理器和緩沖區(qū)管理器來訪問索引的內(nèi)容了。所有現(xiàn)有 的索引訪問方法更是使用Section 54.5里面描述的標(biāo) 準(zhǔn)的頁面布局,并且索引行頭都使用同樣的格式;但是這些東西都不是強制訪問方法執(zhí) 行的。也就是說必要的話你可以不用這些標(biāo)準(zhǔn)格式。
索引實際上是一些數(shù)據(jù)的鍵值與行標(biāo)識符 TIDs之間的映射, 這些行標(biāo)識符是索引的父表中的行版本(行)的標(biāo)識。一個TID由一個塊號 和一個改塊內(nèi)的項編號組成(參閱Section 54.5)。 這些就是從該表中抓取某個特定行版本的足夠的信息。索引并不直接知道 在MVCC下,同一個邏輯行可能有多個現(xiàn)存的版本;對于索引而言,每個 行都是一個獨立的對象,都需要自己的索引條目。因此,對一行的更新總 是為該行創(chuàng)建全新的索引條目,即使鍵值沒有改變也如此。最新行對這個 聲明來說是個異常;但索引也不會處理這些。已經(jīng)廢棄的行的索引條目是 在廢棄行自己被回收的時候被回收的(通過清理)。