| PostgreSQL | ||
|---|---|---|
| 上一頁 | 下一頁 | |
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 )
CREATE INDEX 在指定的表 table 上構建一個名為 index_name 的索引。
小技巧: 索引主要用來提高資料庫性能。但是如果不恰當的使用將導致性能的下降。
在上面第一個語法裡,索引的鍵字以列/字段名聲明﹔一個列/字段也可以與一個運算符號表相聯。一個運算符號表用以說明某索引將要用到的運算符號。例如, 一個4-字節整數的 btree 索引將使用int4_ops 表﹔這個運算符號表包括4-字節整數的比較函數。預設的運算符號表是該域型態的匹配運算符號表。
在第二種語法中,索引是以用戶定義的函數 func_name 的結果定義的,該函數應用於一個表的一個或多個字段。這些函數索引可用於獲取更快的數據訪問速度,尤其在這些數據的操作是基於一些需要做一定轉換才能用於基本數據的運算符號時。
Postgres 為從索引提供 btree,rtree 和 hash(散列)訪問模式。btree 訪問模式是一個 Lehman-Yao 高並發 btrees 的實現。rtree 訪問模式用 Guttman 的二分算法實現了標準的 rtrees。hash(散列)訪問模式是 Litwin 的線性散列的一個實現。我們單獨的列出這些所用的算法是要表明所有這些訪問模式都是完全動態的並且不必進行周期性的最佳化(例如,像靜態散列算法常見的那樣)。
當一個索引了的字段涉及到使用: <,<=,=,>=,> 之一進行比較時,Postgres 的查詢最佳化器將考慮在掃描中使用 btree 索引。
Postgres 裡兩種 box (方形)表都支援對 box 數據型態的索引。兩者的區別是 bigbox_ops 把方形的坐標按比例縮小,以避免在對非常大的浮點數坐標做乘法,加法和減法時出現浮點例外。如果你的方形所在的範圍的大小是 20,000 單位的平面或更大,你應該用 bigbox_ops。poly_ops 運算符號表支援 polygon 型態數據的 rtree 索引。
當一個索引了的字段涉及到使用: <<,&<,&>,>>,@,~=,&& 之一進行比較時,Postgres 的查詢最佳化器將考慮在掃描中使用 rtree 索引。
當一個索引了的字段涉及到使用 = 進行比較時,Postgres 的查詢最佳化器將考慮在掃描中使用散列(hash)索引。
目前,只有 BTREE 訪問模式支援多字段索引。最多可以聲明 7 的關鍵字。
使用 DROP INDEX 刪除一個索引。
int24_ops 運算符號表在為 int2 型態的數據構建索引並且與查詢資格條件裡的 int4 數據做比較時很有用。類似的,int42_ops 支援對要和查詢裡的 int2 數據做比較的 int4 數據進行索引。
下面的選擇列表返回所有 ops_names:
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);
CREATE INDEX 是 Postgres 語言擴展。
在 SQL92 中沒有 CREATE INDEX 命令。
| 上一頁 | 首頁 | 下一頁 |
| CREATE GROUP | 開頭 | CREATE LANGUAGE |