CREATE INDEX 在指定的表上構造一個名為
index_name
的索引。索引主要用來提高數據庫性能。但是如果不恰當的使用將導致性能的下降。
PostgreSQL
為從索引提供 B-tree,R-tree,hash(散列) 和 GiST 索引方法。
B-tree 索引方法是一個 Lehman-Yao 高并發 B-trees 的實
現。R-tree 索引方法用 Guttman 的二次分裂算法實現了標準的 R-trees。
hash(散列)索引方法是 Litwin 的線性散列的一個實現。
用戶也可以定義它們自己的索引方法,但這個工作相當復雜。
如果出現了
WHERE 子句,則創建一個
部分索引。
部分索引是一個只包含表的一部分記錄的索引,通常是該表中比其它部分數據更有用的部分。
在 WHERE 子句里用的表達式只能引用下層表的字段,但是它可以使用所有字段,而不僅僅是被索引的字段。
目前,子查詢和聚集表達式也不能出現在WHERE里。
索引定義里的所有函數和操作符都必須是immutable,(不變的)也就是說,
它們的結果必須只能依賴于它們的輸入參數,而決不能依賴任何外部的影響(比如另外一個表的內容或者當前時間)。
這個約束確保該索引的行為是定義完整的。要在一個索引上使用用戶定義函數,請記住在你創建它的時候把它標記為immutable的函數。
目前,只有 B-tree 和 gist 索引方法支持多字段索引。
缺省時最多可以聲明 32 個鍵字(這個限制可以在制作 PostgreSQL 時修改)。
目前只有 B-tree 支持唯一索引。
可以為索引的每個列/字段聲明一個
操作符表。
操作符表標識將要被該索引用于該列/字段的操作符。
例如, 一個四字節整數的 B-tree 索引將使用
int4_ops 表;
這個操作符表包括四字節整數的比較函數。 實際上,該域的數據類型的缺省操作符表一般就足夠了。
某些數據類型有操作符表的原因是,它們可能有多于一個的有意義的順序。
例如,我們對復數類型排序時有可能以絕對值或者以實部。
我們可以通過為該數據類型定義兩個操作符表,然后在建立索引的時候選擇合適的表來實現。
http://www.postgresql.org/docs/8.4/interactive/index.html
posted on 2009-12-22 10:00
冰是沒有未來的,因為它的永恒 閱讀(443)
評論(0) 編輯 收藏 所屬分類:
postges database