?
This document uses PHP Chinese website manual Release
PostgreSQL提供了好幾種索引類型:B-tree, Hash, GiST, GIN 。每種索引類型都比較適合某些特定的查詢類型,因?yàn)樗鼈冇昧瞬煌乃惴ā?缺省時(shí),CREATE INDEX命令將創(chuàng)建一個(gè)B-tree索引,它適合大多數(shù)情況。
B-tree索引適合處理那些能夠按順序存儲(chǔ)的數(shù)據(jù)之上的等于和范圍查詢。特別是在一個(gè)建立了索引的字段涉及到使用:
< |
<= |
= |
>= |
> |
僅當(dāng)模式是一個(gè)常量,并且錨定在字符串開頭的時(shí)候,優(yōu)化器才會(huì)把B-tree索引用于模式匹配操作符LIKE和~, 比如:col LIKE 'foo%'或col ~ '^foo' ,但是 col LIKE '%bar'就不行。同時(shí),如果你的服務(wù)器未使用C區(qū)域設(shè)置, 那么你需要用一個(gè)特殊的操作符類創(chuàng)建索引來支持模式匹配查詢上的索引。參閱Section 11.9。還有可能將B-tree索引用于ILIKE和~*, 但是僅當(dāng)模式以非字母字符(不受大小寫影響的字符)開頭才可以。
Hash索引只能處理簡(jiǎn)單的等于比較。 當(dāng)一個(gè)索引了的列涉及到使用=操作符進(jìn)行比較的時(shí)候,查詢規(guī)劃器會(huì)考慮使用Hash索引。 下面的命令用于創(chuàng)建Hash索引:
CREATE INDEX name ON table USING hash (column);
Caution |
Hash索引操作目前沒有記錄WAL日志,因此如果發(fā)生了數(shù)據(jù)庫崩潰,我們可能需要用REINDEX重建Hash索引。 他們也不會(huì)通過流或基于文件復(fù)制而被復(fù)制。 |
GiST索引不是單獨(dú)一種索引類型,而是一種架構(gòu),可以在這種架構(gòu)上實(shí)現(xiàn)很多不同的索引策略。 因此,可以使用GiST索引的特定操作符類型高度依賴于索引策略(操作符類)。 作為示例,PostgreSQL的標(biāo)準(zhǔn)發(fā)布中包含用于二維幾何數(shù)據(jù)類型的 GiST 操作符類,它支持:
<< |
&< |
&> |
>> |
<<| |
&<| |
|&> |
|>> |
@> |
<@ |
~= |
&& |
GIN索引是反轉(zhuǎn)索引,它可以處理包含多個(gè)鍵的值(比如數(shù)組)。 與GiST類似,GIN支持用戶定義的索引策略,可以使用GIN索引的特定操作符類型根據(jù)索引策略的不同而不同。 作為示例,PostgreSQL的標(biāo)準(zhǔn)發(fā)布中包含用于一維數(shù)組的GIN操作符類,它支持:
<@ |
@> |
= |
&& |