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