定義新索引。
語法
CREATE [ UNIQUE ] INDEX name ON table
( { column | ( expression ) } )
[ TABLESPACE tablespace ]
說明
CREATE INDEX
在指定表上構造索引。索引主要用于改進數據庫性能(不當使用會導致性能下降)。
索引的鍵字段以列名的形式指定,也可以使用括號中的表達式的形式指定??梢灾付ǘ鄠€字段以創建多列索引。
索引字段可以是一個從表行的一個或多個列的值進行計算的表達式。此功能可用于根據基本數據的一些轉換,獲取對數據的快速訪問。例如,在UPPER(col)
上計算的索引將允許子句 WHEREUPPER(col) = 'JIM'
使用索引。
多列索引中最多可以指定32個字段。
PolarDB提供B樹索引方法。B樹索引方法是Lehman-Yao高并發B樹的實施。
默認情況下,索引不用于IS NULL
子句。
索引定義中使用的所有函數和運算符必須是“不可變”的,其結果必須僅依賴于其參數,并且絕不會依賴于任何外部影響(例如另一個表的內容或當前時間)。此限制確保正確地定義索引的行為。要在索引表達式中使用用戶定義的函數,請記住在創建函數時將其標記為不可變。
如果您在分區表上創建索引,則CREATE INDEX
命令會將索引傳播到表的二級分區。
參數
參數 | 說明 |
UNIQUE | 使得系統在創建索引(如果數據已存在)以及每次添加數據時,檢查表中的重復值。嘗試插入或更新會導致重復條目的數據時,將生成錯誤。 |
name | 要創建的索引的名稱。此處不能包含任何schema名稱;索引始終在與其父表相同的schema中創建。 |
table | 要編制索引的表的名稱(可能是schema限定的)。 |
column | 表中列的名稱。 |
expression | 一個基于表的一列或多列的表達式。表達式通常必須括在一對括號中,如語法中所示。但是,如果表達式采用函數調用的形式,則可以省略括號。 |
示例
在表emp的列ename上創建B樹索引:
CREATE INDEX name_idx ON emp (ename);
創建與上文相同的索引,但將其放在index_tblspc表空間中:
說明對于高權限賬號,支持將索引創建在指定表空間的語法,但是實際上對象還是在pg_default表空間下,執行過程中會返回提醒信息。對于普通用戶,不支持該語法。
CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;