全部產品
Search
文件中心

PolarDB:分區表索引

更新時間:Aug 24, 2024

分區表通常有巨大的資料量。為了加快查詢速度,通常會使用索引功能。本文介紹了分區表的索引功能。

分區表索引類型

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;