PostgreSQL 提供了幾種索引型別:B-tree、Hash、GiST、SP-GiST、GIN、BRIN,以及擴充套件 bloom。每種索引型別都使用一種最適合不同型別索引子句的演算法。預設情況下,CREATE INDEX
命令建立 B-tree 索引,這適用於最常見的情況。其他索引型別透過寫入關鍵字 USING
後跟索引型別名稱來選擇。例如,建立一個 Hash 索引
CREATE INDEXname
ONtable
USING HASH (column
);
B-tree 索引可以處理可排序資料的相等性和範圍查詢。特別是,當索引列涉及以下運算子之一的比較時,PostgreSQL 查詢規劃器會考慮使用 B-tree 索引:
< <= = >= >
等同於這些運算子組合的構造,例如 BETWEEN
和 IN
,也可以使用 B-tree 索引搜尋來實現。此外,索引列上的 IS NULL
或 IS NOT NULL
條件也可以與 B-tree 索引一起使用。
如果模式是常量並且錨定在字串的開頭(例如,col LIKE 'foo%'
或 col ~ '^foo'
,而不是 col LIKE '%bar'
),則最佳化器還可以使用 B-tree 索引對涉及模式匹配運算子 LIKE
和 ~
的查詢。然而,如果您的資料庫不使用 C 區域設定,則需要使用特殊的運算子類建立索引來支援模式匹配查詢的索引;請參閱下面的 第 11.10 節。對於 ILIKE
和 ~*
,也可以使用 B-tree 索引,但前提是模式以非字母字元開頭,即不受大小寫轉換影響的字元。
B-tree 索引也可用於按排序順序檢索資料。這並不總是比簡單的掃描和排序更快,但通常很有幫助。
GiST 索引本身並不是一種索引,而是一個基礎設施,可以在其中實現許多不同的索引策略。因此,GiST 索引可以使用的特定運算子取決於索引策略(運算子類)。例如,PostgreSQL 的標準發行版包含適用於幾種二維幾何資料型別的 GiST 運算子類,這些類支援使用以下運算子的索引查詢:
<< &< &> >> <<| &<| |&> |>> @> <@ ~= &&
(這些運算子的含義請參閱 第 9.11 節。) 標準發行版中包含的 GiST 運算子類在 表 65.1 中有記錄。在 contrib
集合或作為獨立專案中有許多其他 GiST 運算子類可用。有關更多資訊,請參閱 第 65.2 節。
GiST 索引還能夠最佳化“最近鄰”搜尋,例如:
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
該查詢查詢離給定目標點最近的十個地點。能夠執行此操作的能力再次取決於所使用的特定運算子類。在 表 65.1 中,可以這樣使用的運算子在“Ordering Operators”列中列出。
SP-GiST 索引,與 GiST 索引類似,提供了一個支援各種搜尋型別的基礎設施。SP-GiST 允許實現廣泛的不同非平衡磁碟資料結構,例如四叉樹、k-d 樹和基數樹(trie)。例如,PostgreSQL 的標準發行版包含適用於二維點的 SP-GiST 運算子類,這些類支援使用以下運算子的索引查詢:
<< >> ~= <@ <<| |>>
(這些運算子的含義請參閱 第 9.11 節。) 標準發行版中包含的 SP-GiST 運算子類在 表 65.2 中有記錄。有關更多資訊,請參閱 第 65.3 節。
與 GiST 類似,SP-GiST 支援“最近鄰”搜尋。對於支援距離排序的 SP-GiST 運算子類,對應的運算子在 表 65.2 的“Ordering Operators”列中列出。
GIN 索引是“倒排索引”,適合包含多個元件值(如陣列)的資料值。倒排索引為每個元件值包含一個單獨的條目,並且可以有效地處理測試特定元件值是否存在的查詢。
與 GiST 和 SP-GiST 類似,GIN 可以支援許多不同的使用者定義的索引策略,並且 GIN 索引可以使用的特定運算子取決於索引策略。例如,PostgreSQL 的標準發行版包含一個適用於陣列的 GIN 運算子類,該類支援使用以下運算子的索引查詢:
<@ @> = &&
(這些運算子的含義請參閱 第 9.19 節。) 標準發行版中包含的 GIN 運算子類在 表 65.3 中有記錄。在 contrib
集合或作為獨立專案中有許多其他 GIN 運算子類可用。有關更多資訊,請參閱 第 65.4 節。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。