PostgreSQL索引描述


索引方式:唯一索引,主鍵索引,多屬性索引,部分索引,表達式索引.

索引類型:B-Tree,Hash,GiST,GIN以及表達式索引

 

PostgreSQL所有索引都是“從屬索引”,也就是說,索引在物理上與它描述的表文件分離。

索引也是對象,在表pg_class里有記錄。

索引的內部結構與索引的訪問方法(索引類型)相關。所有訪問方法都通過頁面來組織索引的內部結構,這樣可以使用存儲管理器提供的接口來訪問索引。

 

索引方式

 

多屬性索引:如果一個索引定義多一個一個屬性,就稱為多屬性索引,用於組合查詢。

PostgreSQL中的B-Tree,GiST,GIN都支持多屬性索引。最多支持32個屬性。

不僅可以用表中的屬性,而且還可以用函數或者表達式計算得到的值作為屬性索引。

 

部分索引:建立在表上的子集的一個索引,該子集有一個表達式定義(表達式就是部分索引謂詞)。

CREATE INDEX STU_NAME_INX ON STUDENT(NAME) WHERE (ID > 10 AND ID <20);

使用部分索引,能夠減小索引規模,提高索引查詢效率。

 

表達式索引:可以建立在函數或者從表中一個或者多個屬性計算出來的標量表達式上。

CREATE INDEX STU_LOW_NAME_IDX ON STUDENT(LOWER(NAME));

表達式索引,只有在查詢是使用與創建時相同的表達式才有作用。

 

部分索引謂詞跟表達式索引的表達式都會存儲在pg_index表indexprs屬性中。 

在創建索引的時候,會根據表達式計算出實際索引值的范圍,這會導致插入跟新速度變慢。

 

 

索引類型

 

B-Tree:一種類似於B+數的數據結構來存儲數據的鍵值。

支持比較查詢跟范圍查詢(>,=,<)。

 

Hash:Hash索引會使用hash函數對索引關鍵字進行散列,Hash只能處理=操作。

 

GiST:通用搜索樹,這個需要單獨來學習。

 

GIN:倒排索引,可以處理包含多個鍵的值(例如數組)。跟GiST類似。 

 

 

索引相關系統表

 

pg_am:

postgres=# select count(*) from pg_am;
 count 
-------
     5
(1 row)

分別為:btree,hash,gist,gin,spgist。

如果是做數據庫二次開發的,可以關注后面13個字段,是提供13個模塊的接口函數。

 

pg_index:

創建個索引,會再pg_class創建個添加一條記錄,也會再pg_index添加一條。

pg_index用於記錄索引的相關信息。

幾個重要字段說明:

  indexrelid   該索引在pg_class里的OID。

  indrelid     表示索引依賴的的基表的OID。

  indisvalid 為真,那么可用於查詢,否則表示該索引不完善,需要在INSERT/UPDATE操作時更新。

  indkey 這為一個數組,記錄這個索引在基表那些字段上面建立了索引,如果數組里有值為0,那么索引屬性在表屬性上是一個表達式。

  indexprs 索引的表達式

 

pg_opclass:

每一個索引類型並不直接設定該類型的索引所要操作的數據類型。該表表明了索引索引方法在操作特定數據

類型的時候,需要使用的的操作集合。

 

還有幾個系統視圖,都是對索引操作類型的說明

pg_opfamily:

pg_amop:

pg_amproc:

 

 

 

 

 

 

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM