定义一个新的索引。
语法
CREATE [ UNIQUE ] INDEX name ON table
( { column | ( expression ) } )
[ TABLESPACE tablespace ]
参数
参数名称 | 描述 |
UNIQUE | 当创建索引(如果数据已经存在)和每一次添加数据的时候,这个参数会让系统检查表中的重复值。如果进行的插入或更新操作产生了重复值,将产生错误。 |
name | 要创建索引的名称。它不包含模式名称。索引只能它的源表所在模式中创建。 |
table | 要创建索引的表的名称(可以采用模式限定的方式引用)。 |
column | 表中列的名称。 |
expression | 基于表中一列或多列的表达式。如语法所示,表达式通常必须用括号括起来。然而,如果表达式是函数调用的形式,可以不用写括号。 |
tablespace | 用于创建索引的表空间。如果没有指定这个参数,那么使用参数default_tablespace所指定的表空间。如果default_tablespace参数值是空字符串,那么使用数据库的缺省表空间。 |
描述
CREATE INDEX
命令用于在指定的表上创建一个索引。索引主要是用来提高数据库的性能。
索引的关键字字段可以是列名,也可以是写在括号中的表达式。您可以指定多个字段来创建多列索引。
索引字段可以是由表记录中一列或者多列表字段值计算出来的一个表达式。您可以使用这种特性来快速访问基于基础数据转换后的数据。例如,由UPPER(col)
计算得出的索引值允许子句WHERE UPPER(col) = 'JIM'
使用索引。
PolarDB提供B-树结构的索引。B-树索引是Lehman-Yao高并发B-树算法的应用实现。
在缺省情况下,不能为IS NULL子句使用索引。
在索引定义中用到的所有函数和操作符必须是不可改变的,也就是说,它们的结果只取决于它们的参数而与外面的影响无关(例如,另外一张表的内容或者当前系统时间的改变)。这个限制确保索引的行为是明确界定的,如果在索引中使用用户定义的函数,必须记住在创建它的时候把函数标识为不可改变。
如果您要在分区表中创建索引,那么CREATE INDEX
命令则会基于引用的表的基础上生成索引:
如果您在
CREATE INDEX
命令中指定了分区根的名称,那么同时也会创建表的任何分区或子分区索引。如果您在
CREATE INDEX
命令中指定了分区备份表的名称,那么同时也会创建这个分区的任何子分区索引。如果您在
CREATE INDEX
命令中指定了子分区备份表的名称,那么只会创建这个子分区表的索引。
最多可为多列索引指定32个字段。
示例
在表emp中名称为ename的列上创建一个B-树索引:
CREATE INDEX name_idx ON emp (ename);
在表空间index_tblspc上创建一个和上面一样的索引:
对于polar_superuser用户,支持将索引存储在指定表空间的语法,但是实际上对象还是在pg_default表空间下,执行过程中会返回提醒信息。对于普通用户,不支持该语法。
CREATE INDEX name_idx ON emp (ename) TABLESPACE index_tblspc;