CREATE INDEX¶
既存の ハイブリッドテーブル に新しいセカンダリインデックスを作成し、インデックスにデータを入力します。
インデックスの作成は、オンライン(ノンブロッキング)操作です。インデックスが構築されている間、ハイブリッドテーブルは SELECT と DML ステートメントで使用可能なままになります。しかし、ハイブリッドテーブルがアクティブに使用されておらず、ダウンタイムが問題にならない場合は、インデックスを定義した状態でハイブリッドテーブルを再作成することをお勧めします。 ハイブリッドテーブルを作成する もご参照ください。
- こちらもご参照ください。
DROP INDEX、 SHOW INDEXES、 CREATE HYBRID TABLE、 DROP TABLE、 DESCRIBE TABLE、 SHOW HYBRID TABLES
構文¶
CREATE [ OR REPLACE ] INDEX [ IF NOT EXISTS ] <index_name>
ON <table_name>
( <col_name> [ , <col_name> , ... ] )
パラメーター¶
index_name
新しいインデックスの識別子を指定します。指定したハイブリッドテーブルの新しいインデックスには、それぞれ一意な名前を選択する必要があります。ハイブリッドテーブルには、同じ名前または同じ順序の列セットを持つ他のセカンダリインデックスは存在できません。
table_name
新しいインデックスを保持する既存のハイブリッドテーブルの名前を指定します。
col_name
ハイブリッドテーブルの既存の列名を指定します。テーブル作成時に定義されたインデックス列に関するすべての要件が、列識別子に適用されます。
ハイブリッド・テーブルには、同じ順序の列集合に対して定義された2つのセカンダリ・インデックスを含めることはできません。
地理空間データ型 (GEOGRAPHY、 GEOMETRY)、 半構造化データ型 (ARRAY、 OBJECT、 VARIANT)、 ベクトル・データ型 (VECTOR)を持つ列は、セカンダリ・インデックスではサポートされていません。
アクセス制御の要件¶
インデックスを作成するには、ハイブリッドテーブルで OWNERSHIP 権限を持つロールを使用する必要があります。
使用上の注意¶
CREATE INDEX コマンドを使用して外部キー制約、主キー制約、または一意キー制約を追加することはできません。
新しいインデックスの作成が、同時に他のワークロードをブロックすることはありません。ハイブリッドテーブルは、 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 '<col_name>' cannot be dropped because it is used by index '<index-name>'.
オンラインインデックスの構築は、 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 INDEX の例を実行するには、まずハイブリッド・テーブルを作成してロードします。
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);
以下を使用して、テーブルにインデックスを作成することができます。
CREATE OR REPLACE INDEX vidx ON mytable (val);
+----------------------------------+
| status |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
インデックスの構築中に障害が発生した場合、 SHOW INDEXES コマンドは以下のステータスを報告します。
BUILD FAILURE Index build failed. Please drop the index and re-create it.
インデックスの構築を中止することを決定した場合は、 DROP INDEX コマンドを使用できます。
DROP INDEX mytable.vidx;
+-------------------------------------+
| status |
|-------------------------------------|
| Statement executed successfully. |
+-------------------------------------+