分区表通常有巨大的数据量。为了加快查询速度,通常会使用索引功能。本文介绍了分区表的索引功能。
分区表索引类型
PolarDB PostgreSQL版(兼容Oracle)支持分区上的两种索引类型:
本地索引
在分区表本地索引(Local Index)中,本地索引与分区表的分区一一对应,具有与其表相同的分区数和相同的分区范围。每个索引分区都与基础表的一个分区相关联,因此索引分区中的所有键仅引用单个表分区中存储的行。 因此数据库会自动将索引分区与其关联的表分区同步,从而使每个表索引相互独立。
本地索引通过指定LOCAL
属性创建。 在与基础表相同的列上对索引进行分区,创建相同数量的分区或子分区,并为它们提供与基础表的相应分区相同的分区范围。
当基础表中的分区被添加、删除、合并或拆分时,或者当散列分区或子分区被添加或合并时, PolarDB PostgreSQL版(兼容Oracle)会自动维护索引分区。
如果分区列构成索引列的子集,则可以创建UNIQUE本地索引,从而保证具有相同索引键的行始终映射到同一分区。
全局索引
全局索引(Global Index)是一种B树索引,它也可以被分区,其分区独立于创建它的基础表。
不同于本地索引中索引分区和表分区一一对应的关系,全局索引分区可以指向所有表分区。全局索引也可以被分区,它的分区键必须是索引键的前缀。
语法说明
创建本地索引
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]
( { column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
[ INCLUDE ( column_name [, ...] ) ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ TABLESPACE tablespace_name ]
[ WHERE predicate ]
创建全局索引
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name
( { column_name | ( expression ) } [ COLLATE collation ] [ opclass [ ( opclass_parameter = value [, ... ] ) ] ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) GLOBAL
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ TABLESPACE tablespace_name ]
示例
创建本地索引
在表films的title列上创建本地索引title_idx:
CREATE UNIQUE INDEX title_idx ON films (title);
创建全局索引
在表films的title列上创建全局索引title_idx:
CREATE UNIQUE INDEX title_idx ON films (title) global;
文档内容是否对您有帮助?