分區(qū)表索引
分區(qū)表通常有巨大的數(shù)據(jù)量。為了加快查詢速度,通常會使用索引功能。本文介紹了分區(qū)表的索引功能。
分區(qū)表索引類型
PolarDB PostgreSQL版(兼容Oracle)支持分區(qū)上的兩種索引類型:
本地索引
在分區(qū)表本地索引(Local Index)中,本地索引與分區(qū)表的分區(qū)一一對應(yīng),具有與其表相同的分區(qū)數(shù)和相同的分區(qū)范圍。每個索引分區(qū)都與基礎(chǔ)表的一個分區(qū)相關(guān)聯(lián),因此索引分區(qū)中的所有鍵僅引用單個表分區(qū)中存儲的行。 因此數(shù)據(jù)庫會自動將索引分區(qū)與其關(guān)聯(lián)的表分區(qū)同步,從而使每個表索引相互獨立。
本地索引通過指定LOCAL
屬性創(chuàng)建。 在與基礎(chǔ)表相同的列上對索引進(jìn)行分區(qū),創(chuàng)建相同數(shù)量的分區(qū)或子分區(qū),并為它們提供與基礎(chǔ)表的相應(yīng)分區(qū)相同的分區(qū)范圍。
當(dāng)基礎(chǔ)表中的分區(qū)被添加、刪除、合并或拆分時,或者當(dāng)散列分區(qū)或子分區(qū)被添加或合并時, PolarDB PostgreSQL版(兼容Oracle)會自動維護(hù)索引分區(qū)。
如果分區(qū)列構(gòu)成索引列的子集,則可以創(chuàng)建UNIQUE本地索引,從而保證具有相同索引鍵的行始終映射到同一分區(qū)。
全局索引
全局索引(Global Index)是一種B樹索引,它也可以被分區(qū),其分區(qū)獨立于創(chuàng)建它的基礎(chǔ)表。
不同于本地索引中索引分區(qū)和表分區(qū)一一對應(yīng)的關(guān)系,全局索引分區(qū)可以指向所有表分區(qū)。全局索引也可以被分區(qū),它的分區(qū)鍵必須是索引鍵的前綴。
語法說明
創(chuàng)建本地索引
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 ]
創(chuàng)建全局索引
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 ]
示例
創(chuàng)建本地索引
在表films的title列上創(chuàng)建本地索引title_idx:
CREATE UNIQUE INDEX title_idx ON films (title);
創(chuàng)建全局索引
在表films的title列上創(chuàng)建全局索引title_idx:
CREATE UNIQUE INDEX title_idx ON films (title) global;