シャード表の索引の作成

シャード表にローカル索引を作成できます。また、シャード表がサブパーティション化されている場合、シャーディング・キーでグローバル・パーティション索引を作成することもできます

ローカル索引

シャード表の一意のローカル索引にはシャーディング・キーを含める必要があります。

次の例では、account表のid列にid1というローカル索引を作成します。

CREATE INDEX id1 ON account (id) LOCAL;

次の例では、account表のid列およびstate列に対して、id2というローカル一意索引を作成します。

CREATE UNIQUE INDEX id2 ON account (id, state) LOCAL;

サブパーティションのグローバル索引

ほとんどのシャード表のグローバル索引は、オンライン・チャンク移動のパフォーマンスを危険にさらす可能性があるため、許可されません。ただし、サブパーティション・キーを含めなくても、コンポジット・パーティション化されたシャード表に主キー/一意索引を作成できます。

次のCREATE INDEX構文を使用して、コンポジット・パーティション化されたシャード表にグローバル索引を作成します。

CREATE [UNIQUE] INDEX index_name ON table_name (col1, col2 ...)
[TABLESPACE SET tsset]
PARTITIONED AS TABLE;

たとえば、次の文は主キーを含むコンポジット・シャード表を作成します。

CREATE SHARDED TABLE customers 
( cust_id     NUMBER NOT NULL
, name        VARCHAR2(50)
, address     VARCHAR2(250)
, location_id VARCHAR2(20)
, class       VARCHAR2(3)
, signup_date DATE
, CONSTRAINT cust_pk PRIMARY KEY(cust_id)
)
TABLESPACE SET ts1
PARTITION BY CONSISTENT HASH (cust_id)
SUBPARTITION BY RANGE (signup_date)
SUBPARTITION TEMPLATE 
( SUBPARTITION per1 VALUES LESS THAN (TO_DATE('01/01/2000','DD/MM/YYYY')),
  SUBPARTITION per2 VALUES LESS THAN (TO_DATE('01/01/2010','DD/MM/YYYY')),
  SUBPARTITION per3 VALUES LESS THAN (TO_DATE('01/01/2020','DD/MM/YYYY')),
  SUBPARTITION future VALUES LESS THAN (MAXVALUE))
PARTITIONS AUTO
;

次の文は、PARTITIONED AS TABLE索引の作成を示しています。

CREATE UNIQUE INDEX custid_idx
ON customers(cust_id)
TABLESPACE SET tsidx1
PARTITIONED AS TABLE;

SPLIT CHUNK処理

グローバル・パーティション索引は、チャンクの分割時に基礎となる表パーティションを分割すると自動的に分割されます。

チャンク分割は、実際には一連の分割パーティション操作です。グローバル索引の場合、パーティション分割時のデフォルトの動作では索引全体が無効になります。シャード表索引では、各索引パーティションが表と同一パーティション化されているため、分散データベースは対応する分割索引操作を自動的に発行できます。

MOVE CHUNK処理

シャード表索引の場合、索引全体を無効にするのではなく、分散データベースによって影響を受ける索引パーティションのみが無効化され、すべての交換が完了した後に索引が再構築されます。

ベクトル索引

シャード表にはベクトル索引を作成できますが、わずかな違いがあります。Globally Distributed Databaseでのベクトル索引を参照してください。