| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 11. 索引 | Fast Forward | Next |
PostgreSQL 提供了好幾種索引類型︰ B-tree,R-tree,Hash 和 GiST。每種索引類型都比較適合某些特定的查詢類型, 因為它們用了不同的算法。 預設時,CREATE INDEX 命令將建立一個 B-tree 索引, 它適合大多數情況。
B-tree 可以處理那些可以按照某種順序儲存的資料的等於和範圍查詢。 特別是在一個建立了索引的列涉及到使用下列操作符之一進行比較的時候, PostgreSQL 的查詢規劃器都會考慮使用 B-tree 索引︰
| < |
| <= |
| = |
| >= |
| > |
優化器也會把 B-tree 所以用於涉及模式匹配操作符 LIKE, ILIKE,~,和 ~* 的查詢,條件是模式錨接在字串的開頭,比如, col LIKE 'foo%' 或者 col ~ '^foo', 而不是 col LIKE '%bar'。 但是,如果您的伺服器不適用 C 區域,那麼您需要用一個特殊的操作符資料表建立索引來支援模式匹配查詢上的索引。 參閱下面的 Section 11.6。
R-tree 索引特別適合於空間資料。要建立一個 R-tree 索引, 使用下面形式的命令
CREATE INDEX name ON table USING RTREE (column);
當一個索引了的列涉及到使用下列操作符之一進行比較的時候, PostgreSQL 的查詢規劃器都會考慮使用 R-tree 索引︰
| << |
| &< |
| &> |
| >> |
| @ |
| ~= |
| && |
散列(hash)索引只能處理簡單的等於比較。 當一個索引了的列涉及到使用 = 操作符進行比較的時候, 查詢規劃器會考慮使用散列索引。 下面的命令用於建立散列索引︰
CREATE INDEX name ON table USING HASH (column);
注意: 測試資料表明 PostgreSQL 的散列索引和 B-tree 索引類似或者慢一些, 而且散列索引的尺寸和製作時間要差很多。而且在高度並發的條件下,散列 索引的性能也很差。因此,目前我們不建議使用散列索引。
GiST 索引不是單獨一種索引類型,而是一種架構,可以在這種架構上實現很多不同的索引策略。 因此,可以使用 GiST 索引的特定操作符類型根據索引策略的不同而不同(操作符資料表)。 祥見 Chapter 48。
B-tree 索引是一個 Lehman-Yao 高並發 B-tree 的實 現。R-tree 索引用 Guttman 的二次分割算法實現了標準的 R-tree。 hash(散列)索引是 Litwin 的線性散列的一個實現。 我們單獨的列出這些所用的算法是要資料表明所有這些索引方法都是完全動態的並且不必進行週期性的優化 (例如,像靜態散列算法常見的那樣)。