CREATE INDEX

既存の ハイブリッドテーブル に新しいセカンダリインデックスを作成し、インデックスにデータを入力します。

インデックスの作成は、オンライン(ノンブロッキング)操作です。インデックスが構築されている間、ハイブリッドテーブルは SELECT と DML ステートメントで使用可能なままになります。

こちらもご参照ください。

DROP INDEXSHOW INDEXESCREATE HYBRID TABLEDROP TABLEDESCRIBE TABLESHOW HYBRID TABLES

構文

CREATE [ OR REPLACE ] INDEX [ IF NOT EXISTS ] <index_name>
  ( <col_name>
      [ , <col_name> ] ) ON <table_name>
Copy

パラメーター

index_name

新しいインデックスの識別子を指定します。名前は、インデックスが作成されるハイブリッドテーブルで一意にする必要があります。ハイブリッドテーブルには、同じ名前または同じ順序の列セットを持つ他のセカンダリインデックスは存在できません。

table_name

新しいインデックスを保持する既存のハイブリッドテーブルの名前を指定します。

col_name

ハイブリッドテーブルの既存の列名を指定します。テーブル作成時に定義されたインデックス列に関するすべての要件が、列識別子に適用されます。

使用上の注意

  • CREATE INDEX コマンドを使用して外部キー制約、主キー制約、または一意キー制約を追加することはできません。

  • インデックスを作成するには、ハイブリッドテーブルで OWNERSHIP 権限を持つロールを使用する必要があります。

  • 指定したハイブリッドテーブルの新しいインデックスには、それぞれ一意な名前を選択する必要があります。

  • 新しいインデックスの列を選択する際、ハイブリッドテーブルには、同じ順序の列セットに対して定義されたセカンダリインデックスを2つ含めることはできないことに注意してください。

  • 一部の列型(例: VARIANT)は、セカンダリインデックスでは使用できません。

  • 新しいインデックスの作成が、同時に他のワークロードをブロックすることはありません。ハイブリッドテーブルは、 SELECT と DML ステートメントの同時実行に使用できます。

  • 1つのハイブリッドテーブルにつき、常に1つのアクティブインデックス構築操作のみが許可されます。

  • SHOW INDEXES を使用すると、インデックス作成の進捗を追跡することができます。STATUS 列は以下の値になります。

    • ACTIVE: インデックスが完成し、データの取得に使用できます。

    • SUSPENDED: インデックスは更新されるのみで、データの取得には使用されません。

    • BUILD FAILURE: インデックス構築処理でエラーが発生しました。インデックスをドロップして再作成する必要があります。

    • BUILD IN PROGRESS: インデックスは構築中であり、データの取得には使用されていません。

  • ステータスが SUSPENDED、 BUILD FAILURE、または BUILD IN PROGRESS である非アクティブインデックスを再構築するには、 DROP INDEX と CREATE INDEX を使用します。

  • 構築中のインデックスの一部である列を削除する場合は、まずインデックスをドロップしてから列をドロップして、インデックスの構築を停止する必要があります。インデックスをドロップする前に列をドロップしようとすると、 Column '<列名>' cannot be dropped because it is used by index '<インデックス名>'. というエラーメッセージが表示されます。

  • オンラインインデックスの構築は、 CREATE INDEX ステートメントが発行されたときに、同じテーブル上で DMLs を持つすべてのアクティブなトランザクションが完了するまで進行しません。これらのトランザクションのいずれかが5分以上アイドルのままである場合は、デフォルトで中止されます。 トランザクション をご参照ください。

  • インデックス構築プロセス中、 DML は新しいインデックスへの書き込みを実行しますが、データを取得するためにインデックスを使用することはありません。

  • CREATE INDEX コマンドの完了後に実行を開始した少数の同時実行 DMLs に失敗して、次のエラーが返される場合があります。 DML was unaware of concurrent DDL.Please retry this query.

  • 中断された DML ステートメントが複数のステートメントトランザクションに属している場合は、 TRANSACTION_ABORT_ON_ERROR パラメーターが TRUE に設定されている場合にのみ、トランザクションがロールバックされます。

  • 新しく作成されたインデックスは、インデックスの作成プロセスが正常に終了し、インデックスのステータスが ACTIVE である場合にのみ、データの取得に使用されます。

以下の例では、すでにハイブリッドテーブルが作成され、いくつかの記録が含まれていることを前提としています。

CREATE OR REPLACE HYBRID TABLE mytable (
  pk INT PRIMARY KEY,
  val INT
  val2 INT
);

INSERT INTO mytable SELECT seq, seq+100, seq+200
  FROM (SELECT seq8() seq FROM TABLE(GENERATOR(rowcount => 100)) v);
Copy

以下を使用して、テーブルにインデックスを作成することができます。

CREATE OR REPLACE INDEX vidx (val) ON mytable;
Copy

コマンドは次のメッセージを返します。 BUILD IN PROGRESS The index is being built and will register concurrent DML changes to the base table.The index will not be used until it has finished building.

インデックス構築の進行中に失敗が発生した場合、 SHOW INDEXES コマンドは操作が失敗したことを示します。 BUILD FAILURE Index build failed.Please drop the index and re-create it.

インデックスの構築をやめることを決定した場合は、 DROP INDEX コマンドを使用できます。

DROP INDEX vid ON mytable;
Copy
+-------------------------------------+
| status                              |
|-------------------------------------|
| Statement executed successfully.    |
+-------------------------------------+