定义新索引。

语法

CREATE [ UNIQUE ] INDEX name ON table
  ( { column | ( expression ) } )
  [ TABLESPACE tablespace ]

说明

CREATE INDEX 在指定表上构造索引 name。索引主要用于改进数据库性能(虽然不当使用会导致性能下降)。

索引的键字段以列名的形式指定,也可以使用括号中的表达式的形式指定。可以指定多个字段以创建多列索引。

索引字段可以是一个从表行的一个或多个列的值进行计算的表达式。此功能可用于根据基本数据的一些转换,获取对数据的快速访问。例如,在 UPPER(col) 上计算的索引将允许子句 WHEREUPPER(col) = 'JIM' 使用索引。

PolarDB提供 B 树索引方法。B 树索引方法是 Lehman-Yao 高并发 B 树的实施。

默认情况下,索引不用于 IS NULL 子句。

索引定义中使用的所有函数和运算符必须是“不可变”的,其结果必须仅依赖于其参数,并且绝不会依赖于任何外部影响(例如另一个表的内容或当前时间)。此限制确保正确地定义索引的行为。要在索引表达式中使用用户定义的函数,请记住在创建函数时将其标记为不可变。

如果您在分区表上创建索引,则 CREATE INDEX 命令会将索引传播到表的二级分区。

说明 多列索引中最多可以指定 32 个字段。

参数

参数 说明
UNIQUE 使得系统在创建索引(如果数据已存在)以及每次添加数据时,检查表中的重复值。尝试插入或更新会导致重复条目的数据时,将生成错误。
name 要创建的索引的名称。此处不能包含任何 schema 名称;索引始终在与其父表相同的 schema 中创建。
table 要编制索引的表的名称(可能是 schema 限定的)。
column 表中列的名称。
expression 一个基于表的一列或多列的表达式。表达式通常必须括在一对括号中,如语法中所示。但是,如果表达式采用函数调用的形式,则可以省略括号。

示例

在表 emp 的列 ename 上创建 B 树索引:

CREATE INDEX name_idx ON emp (ename);

创建与上文相同的索引,但将其放在 index_tblspc 表空间中:

CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;