CREATE INDEX

定义新索引。

语法

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;