定义新索引。
语法
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;