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 索引一起使用。
對於涉及模式比對運算符 LIKE
和 ~
的查詢,最佳化器也可以使用 B-tree 索引 如果 模式是常數並且錨定到字串的開頭 — 例如,col LIKE 'foo%'
或 col ~ '^foo'
,但不是 col LIKE '%bar'
。但是,如果您的資料庫未使用 C locale,則需要使用特殊的運算符類別建立索引,以支援模式比對查詢的索引;請參閱下面的第 11.10 節。也可以將 B-tree 索引用於 ILIKE
和 ~*
,但前提是模式以非字母字元開頭,即不受大小寫轉換影響的字元。
B-tree 索引也可以用於以排序順序檢索資料。這並不總是比簡單的掃描和排序更快,但通常很有幫助。
Hash 索引儲存從索引欄位的值衍生的 32 位元雜湊碼。因此,此類索引只能處理簡單的等式比較。每當索引欄位涉及使用等號運算符進行比較時,查詢規劃器會考慮使用雜湊索引
=
GiST 索引不是單一種類的索引,而是一個基礎架構,可以在其中實現許多不同的索引策略。因此,GiST 索引可以使用的特定運算符會因索引策略(運算符類別)而異。例如,PostgreSQL 的標準發行版包括幾個二維幾何資料類型的 GiST 運算符類別,支援使用這些運算符的索引查詢
<< &< &> >> <<| &<| |&> |>> @> <@ ~= &&
(有關這些運算符的含義,請參閱第 9.11 節。)標準發行版中包含的 GiST 運算符類別記錄在表 64.1中。許多其他的 GiST 運算符類別可在 contrib
集合中或作為單獨的專案提供。有關更多資訊,請參閱第 64.2 節。
GiST 索引也能夠最佳化“最近鄰”搜尋,例如
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
可以找到距離給定目標點最近的十個地點。執行此操作的能力同樣取決於所使用的特定運算子類別。在表格 64.1中,可以這樣使用的運算子列在「排序運算子」欄位中。
SP-GiST 索引,與 GiST 索引一樣,提供支援各種搜尋方式的基礎架構。SP-GiST 允許實作各種不同的非平衡磁碟資料結構,例如四元樹、k-d 樹和基數樹(tries)。例如,PostgreSQL 的標準發行版本包含二維點的 SP-GiST 運算子類別,支援使用這些運算子的索引查詢
<< >> ~= <@ <<| |>>
(有關這些運算子的含義,請參閱第 9.11 節。)標準發行版本中包含的 SP-GiST 運算子類別記錄在表格 64.2中。有關更多資訊,請參閱第 64.3 節。
與 GiST 一樣,SP-GiST 支援「最近鄰」搜尋。對於支援距離排序的 SP-GiST 運算子類別,對應的運算子列在表格 64.2中的「排序運算子」欄位中。
GIN 索引是「反向索引」,適用於包含多個元件值的資料值,例如陣列。反向索引包含每個元件值的單獨條目,並且可以有效地處理測試是否存在特定元件值的查詢。
與 GiST 和 SP-GiST 一樣,GIN 可以支援許多不同的使用者定義索引策略,並且可以使用 GIN 索引的特定運算子會因索引策略而異。例如,PostgreSQL 的標準發行版本包含用於陣列的 GIN 運算子類別,該類別支援使用這些運算子的索引查詢
<@ @> = &&
(有關這些運算子的含義,請參閱第 9.19 節。)標準發行版本中包含的 GIN 運算子類別記錄在表格 64.3中。許多其他的 GIN 運算子類別可以在 contrib
集合或作為單獨的專案中使用。有關更多資訊,請參閱第 64.4 節。
如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表格來報告文件問題。