全部產品
Search
文件中心

PolarDB:索引類型

更新時間:Jul 06, 2024

本資料庫提供了多種索引類型:B-tree、Hash、GiST、SP-GiST、GIN和BRIN。每一種索引類型使用了一種不同的演算法來適應不同類型的查詢。預設情況下,CREATE INDEX命令建立適合於大部分情況的B-tree索引。

B-tree

B-tree可以在可排序資料上的處理等值和範圍查詢。特別地,本資料庫的查詢規劃器會在任何一種涉及到以下操作符的已索引列上考慮使用B-tree索引:

<

<=

=

>=

>

將這些操作符組合起來,例如BETWEENIN,也可以用 B-tree 索引搜尋實現。同樣,在索引列上的IS NULLIS NOT NULL條件也可以在 B-tree 索引中使用。

最佳化器也會將 B-tree 索引用於涉及到模式比對操作符LIKE~ 的查詢,前提是如果模式是一個常量且被固定在字串的開頭—例如:col LIKE 'foo%'或者col ~ '^foo', 但在col LIKE '%bar'上則不會。但是,如果我們的資料庫沒有使用 C 地區設定,我們需要建立一個具有特殊操作符類的索引來支援模式比對查詢。同樣可以將 B-tree 索引用於ILIKE~,但僅當模式以非字母字元開始,即不受大小寫轉換影響的字元。

B-tree 索引也可以用於檢索排序資料。這並不會總是比簡單掃描和排序更快,但是總是有用的。

Hash索引

Hash 索引只能處理簡單等值比較。不論何時當一個索引列涉及到一個使用了=操作符的比較時,查詢規劃器將考慮使用一個 Hash 索引。下面的命令將建立一個 Hash 索引:

    CREATE INDEX name ON table USING HASH (column);

GiST索引

GiST索引並不是一種單獨的索引,而是可以用於實現很多不同索引策略的基礎設施。相應地,可以使用一個 GiST 索引的特定操作符根據索引策略(操作符類)而變化。作為一個例子,本資料庫的標準捐獻包中包括了用於多種二維幾何資料類型的 GiST 操作符類,它用來支援使用下列操作符的索引化查詢:

<<

&<

&>

>>

<<|

&<|

|&>

|>>

@>

<@

~=

&&

內建 GiST 操作符類表中給出了標準發布中所包括的 GiST 操作符類。GiST 索引也有能力最佳化“最近鄰”搜尋,例如:

    SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;

它將找到離給定目標點最近的10個位置。能夠支援這種查詢的能力同樣取決於被使用的特定操作符類。在內建GiST操作符類表中,“Ordering Operators”列中列出了可以在這種方法中使用的操作符。

SP-GiST索引

和 GiST 相似,SP-GiST索引為支援多種搜尋提供了一種基礎結構。SP-GiST 允許實現眾多不同的非平衡的基於磁碟的資料結構,例如四叉樹、k-d樹和 radix 樹。作為一個例子,本資料庫的標準捐獻包中包含了一個用於二維點的 SP-GiST 操作符類,它用於支援使用下列操作符的索引化查詢:

<<

>>

~=

<@

<^

>^

內建 SP-GiST 操作符類表中給出了標準發布中所包括的 SP-GiST 操作符類。就像 GiST、SP-GiST 支援“nearest-neighbor”搜尋。對於支援距離排序的 SP-GiST 運算子類別,相應的運算子被規定在內建 SP-GiST 操作符類表裡面的“Ordering Operators”列中。

GIN索引

GIN索引是“倒排索引”,它適合於包含多個組成值的資料,例如數組。在倒排索引中,每個組成值都包含一個單獨的項,可以高效地處理查詢指定組成值是否存在的操作。與GiST和SP-GiST類似,GIN可以支援多種不同的使用者定義的索引策略,並且與一個GIN索引配合使用的特定操作符取決於索引策略。作為一個例子,本資料庫的標準貢獻包中包含了用於數組的GIN操作符類,它用於支援使用下列操作符的索引化查詢:

<@

@>

=

&&

內建 GIN 操作符類表中給出了標準發布中所包括的 GIN 操作符類。

BRIN索引

BRIN 索引(區塊範圍索引的縮寫)儲存有關存放在一個表的連續物理區塊範圍上的值摘要資訊。與GiST、SP-GiST和GIN相似,BRIN可以支援很多種不同的索引策略,並且可以與一個BRIN索引配合使用的特定操作符取決於索引策略。對於具有線性排序次序的資料類型,被索引的資料對應於每個區塊範圍的列中值的最小值和最大值,使用這些操作符來支援用到索引的查詢:

<

<=

=

>=

>