W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
PostgreSQL提供了多種索引類型: B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN。每一種索引類型使用了 一種不同的算法來適應(yīng)不同類型的查詢。默認(rèn)情況下, CREATE INDEX
命令創(chuàng)建適合于大部分情況的B-tree 索引。
B-tree可以在可排序數(shù)據(jù)上的處理等值和范圍查詢。特別地,PostgreSQL的查詢規(guī)劃器會在任何一種涉及到以下操作符的已索引列上考慮使用B-tree索引:
<
|
<=
|
=
|
>=
|
>
|
將這些操作符組合起來,例如BETWEEN
和IN
,也可以用B-tree索引搜索實現(xiàn)。同樣,在索引列上的IS NULL
或IS NOT
NULL
條件也可以在B-tree索引中使用。
優(yōu)化器也會將B-tree索引用于涉及到模式匹配操作符LIKE
和~
的查詢,前提是如果模式是一個常量且被固定在字符串的開頭—例如:col LIKE
'foo%'
或者col ~ '^foo'
, 但在col LIKE '%bar'
上則不會。但是,如果我們的數(shù)據(jù)庫沒有使用C區(qū)域設(shè)置,我們需要創(chuàng)建一個具有特殊操作符類的索引來支持模式匹配查詢,參見下面的第 11.10 節(jié)。同樣可以將B-tree索引用于
ILIKE
和~*
,但僅當(dāng)模式以非字母字符開始,即不受大小寫轉(zhuǎn)換影響的字符。
B-tree索引也可以用于檢索排序數(shù)據(jù)。這并不會總是比簡單掃描和排序更快,但是總是有用的。
Hash索引只能處理簡單等值比較。不論何時當(dāng)一個索引列涉及到一個使用了=
操作符的比較時,查詢規(guī)劃器將考慮使用一個Hash索引。下面的命令將創(chuàng)建一個Hash索引:
CREATE INDEX name
ON table
USING HASH (column
);
GiST索引并不是一種單獨的索引,而是可以用于實現(xiàn)很多不同索引策略的基礎(chǔ)設(shè)施。相應(yīng)地,可以使用一個GiST索引的特定操作符根據(jù)索引策略(操作符類)而變化。作為一個例子,PostgreSQL的標(biāo)準(zhǔn)捐獻(xiàn)包中包括了用于多種二維幾何數(shù)據(jù)類型的GiST操作符類,它用來支持使用下列操作符的索引化查詢:
<<
|
&<
|
&>
|
>>
|
<<|
|
&<|
|
|&>
|
|>>
|
@>
|
<@
|
~=
|
&&
|
(這些操作符的含義見第 9.11 節(jié))表 64.1中給出了標(biāo)準(zhǔn)發(fā)布中所包括的
GiST 操作符類。contrib
集合中還包括了很多其他GiST操作符類,可見第 64 章。
GiST索引也有能力優(yōu)化“最近鄰”搜索,例如:
SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
它將找到離給定目標(biāo)點最近的10個位置。能夠支持這種查詢的能力同樣取決于被使用的特定操作符類。 在表 64.1中,“Ordering Operators”列中列出了可以在這種方法中使用的操作符。
和GiST相似,SP-GiST索引為支持多種搜索提供了一種基礎(chǔ)結(jié)構(gòu)。SP-GiST 允許實現(xiàn)眾多不同的非平衡的基于磁盤的數(shù)據(jù)結(jié)構(gòu),例如四叉樹、k-d樹和radix樹。作為一個例 子,PostgreSQL的標(biāo)準(zhǔn)捐獻(xiàn)包中包含了一個用于二維點的SP-GiST操作符類,它用于支持使用下列操作符的索引化查詢:
<<
|
>>
|
~=
|
<@
|
<^
|
>^
|
(其含義見第 9.11 節(jié))表 65.1中給出了標(biāo)準(zhǔn)發(fā)布中所包括的 SP-GiST 操作符類。更多信息參見第 65 章。
就像 GiST, SP-GiST 支持 “nearest-neighbor”搜索. 對于支持距離排序的 SP-GiST 運算符類別,相應(yīng)的運算符被規(guī)定在表 65.1里面的 “Ordering Operators”列中。
GIN 索引是“倒排索引”,它適合于包含多個組成值的數(shù)據(jù)值,例如數(shù)組。倒排索引中為每一個組成值都包含一個單獨的項,它可以高效地處理測試指定組成值是否存在的查詢。
與 GiST 和 SP-GiST相似, GIN 可以支持多種不同的用戶定義的索引策略,并且可以與一個 GIN 索引配合使用的特定操作符取決于索引策略。作為一個例子,PostgreSQL的標(biāo)準(zhǔn)貢獻(xiàn)包中包含了用于數(shù)組的GIN操作符類,它用于支持使用下列操作符的索引化查詢:
<@
|
@>
|
=
|
&&
|
(這些操作符的含義見第 9.19 節(jié))表 66.1中給出了標(biāo)準(zhǔn)發(fā)布中所包括的 GIN
操作符類。在contrib
集合中還有更多其他GIN操作符類,更多信息參見第 66 章。
BRIN 索引(塊范圍索引的縮寫)存儲有關(guān)存放在一個表的連續(xù)物理塊范圍上的值摘要信息。與 GiST、SP-GiST 和 GIN 相似,BRIN 可以支持很多種不同的索引策略,并且可以與一個 BRIN 索引配合使用的特定操作符取決于索引策略。對于具有線性排序順序的數(shù)據(jù)類型,被索引的數(shù)據(jù)對應(yīng)于每個塊范圍的列中值的最小值和最大值,使用這些操作符來支持用到索引的查詢:
<
|
<=
|
=
|
>=
|
>
|
包括在標(biāo)準(zhǔn)發(fā)布中的 BRIN 操作符類的文檔在表 67.1中。更多信息請見第 67 章。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: