創(chuàng)建索引
定義一個新的索引。
語法
CREATE [ UNIQUE ] INDEX name ON table
( { column | ( expression ) } )
[ TABLESPACE tablespace ]
參數(shù)
參數(shù)名稱 | 描述 |
UNIQUE | 當(dāng)創(chuàng)建索引(如果數(shù)據(jù)已經(jīng)存在)和每一次添加數(shù)據(jù)的時候,這個參數(shù)會讓系統(tǒng)檢查表中的重復(fù)值。如果進(jìn)行的插入或更新操作產(chǎn)生了重復(fù)值,將產(chǎn)生錯誤。 |
name | 要創(chuàng)建索引的名稱。它不包含模式名稱。索引只能它的源表所在模式中創(chuàng)建。 |
table | 要創(chuàng)建索引的表的名稱(可以采用模式限定的方式引用)。 |
column | 表中列的名稱。 |
expression | 基于表中一列或多列的表達(dá)式。如語法所示,表達(dá)式通常必須用括號括起來。然而,如果表達(dá)式是函數(shù)調(diào)用的形式,可以不用寫括號。 |
tablespace | 用于創(chuàng)建索引的表空間。如果沒有指定這個參數(shù),那么使用參數(shù)default_tablespace所指定的表空間。如果default_tablespace參數(shù)值是空字符串,那么使用數(shù)據(jù)庫的缺省表空間。 |
描述
CREATE INDEX
命令用于在指定的表上創(chuàng)建一個索引。索引主要是用來提高數(shù)據(jù)庫的性能。
索引的關(guān)鍵字字段可以是列名,也可以是寫在括號中的表達(dá)式。您可以指定多個字段來創(chuàng)建多列索引。
索引字段可以是由表記錄中一列或者多列表字段值計(jì)算出來的一個表達(dá)式。您可以使用這種特性來快速訪問基于基礎(chǔ)數(shù)據(jù)轉(zhuǎn)換后的數(shù)據(jù)。例如,由UPPER(col)
計(jì)算得出的索引值允許子句WHERE UPPER(col) = 'JIM'
使用索引。
PolarDB提供B-樹結(jié)構(gòu)的索引。B-樹索引是Lehman-Yao高并發(fā)B-樹算法的應(yīng)用實(shí)現(xiàn)。
在缺省情況下,不能為IS NULL子句使用索引。
在索引定義中用到的所有函數(shù)和操作符必須是不可改變的,也就是說,它們的結(jié)果只取決于它們的參數(shù)而與外面的影響無關(guān)(例如,另外一張表的內(nèi)容或者當(dāng)前系統(tǒng)時間的改變)。這個限制確保索引的行為是明確界定的,如果在索引中使用用戶定義的函數(shù),必須記住在創(chuàng)建它的時候把函數(shù)標(biāo)識為不可改變。
如果您要在分區(qū)表中創(chuàng)建索引,那么CREATE INDEX
命令則會基于引用的表的基礎(chǔ)上生成索引:
如果您在
CREATE INDEX
命令中指定了分區(qū)根的名稱,那么同時也會創(chuàng)建表的任何分區(qū)或子分區(qū)索引。如果您在
CREATE INDEX
命令中指定了分區(qū)備份表的名稱,那么同時也會創(chuàng)建這個分區(qū)的任何子分區(qū)索引。如果您在
CREATE INDEX
命令中指定了子分區(qū)備份表的名稱,那么只會創(chuàng)建這個子分區(qū)表的索引。
最多可為多列索引指定32個字段。
示例
在表emp中名稱為ename的列上創(chuàng)建一個B-樹索引:
CREATE INDEX name_idx ON emp (ename);
在表空間index_tblspc上創(chuàng)建一個和上面一樣的索引:
對于polar_superuser用戶,支持將索引存儲在指定表空間的語法,但是實(shí)際上對象還是在pg_default表空間下,執(zhí)行過程中會返回提醒信息。對于普通用戶,不支持該語法。
CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;