GB | BIG5
|
| 首頁 > 數據庫 > 其它 > 正文 |
 |
| PostgreSQL7.0手冊-用戶手冊-19. SQL命令-CREATE INDEX |
| 編譯:何偉平 laser@zhengmai.com.cn (2001-04-21 21:48:45) |
CREATE INDEX
名稱
CREATE INDEX 構建一個從索引
語法
CREATE [ UNIQUE ] INDEX index_name ON table
[ USING acc_name ] ( column [ ops_name ] [, ...] )
CREATE [ UNIQUE ] INDEX index_name ON table
[ USING acc_name ] ( func_name( column [, ... ]) [ ops_name ] )
輸入
UNIQUE
令系統檢測當索引創建時(如果數據已經存在)和每次添加數據時表中是否有重復值.如果插入或更新的值回導致重復的記錄時將導致一個錯誤.
index_name
要創建的索引名.
table
要索引的表名.
acc_name
用索引的訪問模式.缺省訪問模式是 BTREE.Postgres 提供三種用從索引的訪問模式:
BTREE
一個 Lehman-Yao 高度並發 btrees 的實現.
RTREE
用 Guttman 二分法做的標準 rtrees 的實現.
HASH
一個Litwin 線性哈希(散列)法的實現.
column
表的列/字段名.
ops_name
一個關聯的操作符表.參閱下文獲取細節。
func_name
用戶定義的函數,其返回值可被索引.
輸出
CREATE
索引成功創建的返回信息.
ERROR: Cannot create index: 'index_name' already exists.
如果不能創建索引,返回此信息.
描述
CREATE INDEX 在指定的表 table 上構建一個名為 index_name 的索引.
小技巧: 索引主要用來提高數據庫性能.但是如果不恰當的使用將導致性能的下降.
在上面第一個語法裡,索引的鍵字以列/字段名聲明.如果索引的訪問模式支持多列索引,我們也可以聲明多個字段.
在上面顯示的第二種語法中,索引是以用戶定義的函數 func_name 的結果定義的,該函數應用一個表的一個或多個字段.這些函數索引可用獲取更快的數據訪問速度,尤其在這些數據的操作是基一些需要做一定轉換才能用基本數據的操作符時.
Postgres 為從索引提供 btree,rtree 和 hash(散列)訪問模式。btree 訪問模式是一個 Lehman-Yao 高並發 btrees 的實現。rtree 訪問模式用 Guttman 的二分算法實現了標準的 rtrees。hash(散列)訪問模式是 Litwin 的線性散列的一個實現。我們單獨的列出這些所用的算法是要表明所有這些訪問模式都是完全動態的並且不必進行周期性的優化(例如,象靜態散列算法常見的那樣)。
使用 DROP INDEX 刪除一個索引.
注意
當一個索引了的字段涉及到使用: <,<=,=,>=,> 之一進行比較時, Postgres 的查詢優化器將考慮在掃描中使用 btree 索引。
當一個索引了的字段涉及到使用: <<,&<,&>,>>,@,~=,&& 之一進行比較時,Postgres 的查詢優化器將考慮在掃描中使用 rtree 索引。
當一個索引了的字段涉及到使用 = 進行比較時,Postgres 的查詢優化器將考慮在掃描中使用散列(hash)索引。
目前,只有 BTREE 訪問模式支持多字段索引。缺省時最多可以聲明 16 個鍵字(這個限制可以在制作 Postgres 時修改).
可以為索引的每個列/字段聲明一個操作符表.操作符表標識將要被該索引用該列/字段的操作符.例如,一個4-字節整數的 btree 索引將使用int4_ops 表;這個操作符表包括4-字節整數的比較函數.實際上,該域的數據類型的缺省操作符表一般就足夠了.某些數據類型有操作符表的原因是,它們可能有多一個的有意義的順序.例如,我們對復數類型排序時有可能以絕對值或者以實數部分.我們可以通過為該數據類型定義兩個操作符表,然在建立索引的時候選擇合適的表來實現.還有些操作符表有特殊的用途:
操作符表 box_ops 和 bigbox_ops 都支持對 box 數據類型的 rtree 索引.兩者的區別是 bigbox_ops 把方形的坐標按比例縮小,以避免在對非常大的浮點數坐標做乘法,加法和減法時出現浮點例外。如果你的方形所在的范圍的大小是 20,000 單位的平面或更大,你應該用 bigbox_ops。
int24_ops 操作符表在為 int2 類型的數據構建索引並且與查詢資格條件裡的 int4 數據做比較時很有用。類似的,int42_ops 支持對要和查詢裡的 int2 數據做比較的 int4 數據進行索引。
下面的查詢顯示所有已定義的操作符表:
SELECT am.amname AS acc_name,
opc.opcname AS ops_name,
opr.oprname AS ops_comp
FROM pg_am am, pg_amop amop,
pg_opclass opc, pg_operator opr
WHERE amop.amopid = am.oid AND
amop.amopclaid = opc.oid AND
amop.amopopr = opr.oid
ORDER BY acc_name, ops_name, ops_comp
用法
在表 films 上的 title 字段創建一個 btree 索引:
CREATE UNIQUE INDEX title_idx
ON films (title);
兼容性
SQL92
CREATE INDEX 是 Postgres 語言擴展.
在 SQL92 中沒有 CREATE INDEX 命令.
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
PostgreSQL7.0手冊-用戶手冊-19. SQL命令-VACUUM (2001-04-21 22:16:33) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-UPDATE (2001-04-21 22:16:12) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-UNLISTEN (2001-04-21 22:15:44) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-TRUNCATE (2001-04-21 22:15:24) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SHOW (2001-04-21 22:15:01) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SET (2001-04-21 22:14:42) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SELECT INTO (2001-04-21 22:14:19) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-SELECT (2001-04-21 22:14:01) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-ROLLBACK (2001-04-21 22:13:41) PostgreSQL7.0手冊-用戶手冊-19. SQL命令-REVOKE (2001-04-21 22:13:18)
|
===更多相關=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |