説明
このステートメントは、インデックスを作成するために使用します。インデックスはテーブル上に作成され、データベーステーブルの1列または複数列の値をソートする構造です。その主な役割はクエリの速度を向上させ、データベースシステムのパフォーマンスオーバヘッドを低減することです。
OceanBase データベースの現在のバージョンでサポートされているインデックスタイプには、一意インデックス、非一意インデックス、関数インデックス、カラムストアインデックス、空間インデックスが含まれます。インデックスを作成する際には、STORING(column_name,...) を使用してインデックステーブル上の冗長列を指定できます。インデックステーブルの冗長列には、ユーザーが追加を指定した列に加えて、主キーテーブルの主キー列も自動的に追加されます(主キーテーブルがない場合は Hidden PK が含まれます)。インデックスに追加の列を格納することで、データベースオプティマイザーにより多くの選択肢を提供できます。
説明
OceanBase データベースのOracleモードでは、テーブル内でインデックス参照されている列を削除すると、作成されたインデックスは無効になります。
権限要件
CREATE INDEX ステートメントを実行してインデックスを作成するには、現在のユーザーが対象オブジェクトに対する少なくともINDEX権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。
構文
CREATE [hint_options] [UNIQUE] INDEX index_name
[USING BTREE] ON table_name (sort_column_key [, sort_column_key...])
[INDEXTYPE IS MDSYS.SPATIAL_INDEX] [index_option...] [partition_option] [index_column_group_option]
sort_column_key:
index_expr [ASC] opt_null_pos [ID id]
opt_null_pos:
empty
| NULLS LAST
| NULLS FIRST
index_option:
GLOBAL
| LOCAL
| BLOCK_SIZE [=] integer
| COMMENT STRING_VALUE
| STORING (column_name_list)
| WITH ROWID
| WITH PARSER STRING_VALUE
| index_using_algorithm
| visibility_option
| DATA_TABLE_ID [=] data_table_id
| INDEX_TABLE_ID [=] index_table_id
| MAX_USED_PART_ID [=] used_part_id
| physical_attributes_option
| parallel_option
parallel_option:
PARALLEL [=] integer
| NOPARALLEL
index_column_group_option:
WITH COLUMN GROUP([all columns, ]each column)
パラメータ説明
パラメータ |
説明 |
|---|---|
| hint_options | ヒントオプションを指定します。このオプションは任意です。現在、parallelのみサポートされています。例:/*+ parallel(10) */。 |
| [UNIQUE] | 任意オプションで、一意インデックスの作成を指定します。 |
| index_name | 作成するインデックス名を指定します。 |
| USING BTREE | 任意オプションで、インデックス作成時にB-treeインデックス構造を使用することを示します。
説明現在、 |
| table_name | インデックスを作成するテーブルを指定します。テーブル名を直接指定するか、schema_name.table_name の形式でテーブル名と所属データベース名を指定できます。 |
| sort_column_key | ソート列のキーを指定します。インデックス作成時に複数のソート列を指定でき、複数のソート列は半角カンマ(,)で区切ります。詳細は下記の sort_column_key を参照してください。 |
| INDEXTYPE IS MDSYS.SPATIAL_INDEX | スペースインデックスの作成を指定します。
注意スペースインデックスを作成する列には、テーブル作成時にSRID情報を指定する必要があります。スペースインデックス作成の詳細については、スペースインデックスの作成を参照してください。 |
| index_option | インデックスオプションを指定します。インデックス作成時に複数のインデックスオプションを指定でき、複数のインデックスオプションは半角スペースで区切ります。詳細は下記の index_option を参照してください。 |
| partition_option | インデックスパーティションの作成オプションを指定します。ハッシュパーティション、範囲パーティション、リストパーティション、および外部テーブルパーティションの指定をサポートします。 |
| index_column_group_option | インデックスオプションを指定します。詳細は下記の index_column_group_option を参照してください。 |
sort_column_key
index_expr:ソートの基準となる列または式を指定しますが、ブール式(例:c1=c1)は使用できません。OceanBaseデータベースの現在のバージョンでは、生成列に対する関数インデックスの作成は禁止されています。関数インデックスでサポートされている式については、関数インデックスでサポートされているシステム関数のリストを参照してください。ASC:オプションです。昇順でソートすることを示します。現在、降順(DESC)の並べ替えはサポートされていません。opt_null_pos:ソートにおけるNULL値の位置を指定します。次の3つの値があります。empty:NULL値の位置が指定されていないことを示します。デフォルトでは、データベース管理システムのデフォルト動作に従います。NULLS LAST:ソート結果において、NULL値を非NULL値の後に配置することを指定します。NULLS FIRST:ソート結果において、NULL値を非NULL値の前に配置することを指定します。
ID id:オプションです。ソートキーのID番号を示します。
例えば、TEST_TBL1 という名前のテーブルに IDX_TBL1_C1 という名前のインデックスを作成し、そのインデックスが c1 列に基づいて昇順でソートされるよう指定し、ソート結果においてNULL値を非NULL値の後に配置するよう指定します。
obclient> CREATE TABLE TEST_TBL1 (
id NUMBER PRIMARY KEY,
c1 VARCHAR2(100),
c2 NUMBER,
c3 DATE
);
obclient> CREATE INDEX IDX_TEST_TBL1_C1 ON TEST_TBL1 (c1 ASC NULLS LAST);
index_option
GLOBAL:グローバルインデックスを作成することを示します。LOCAL:ローカルインデックスを作成することを示します。BLOCK_SIZE [=] integer:インデックスブロックのサイズ、つまり各インデックスブロック内のバイト数を指定します。COMMENT STRING_VALUE:インデックスにコメントを追加します。STORING (column_name_list):インデックスに格納する列を指定します。WITH ROWID:行識別子を含むインデックスを作成します。WITH PARSER STRING_VALUE:インデックスに必要なパーサーを指定します。index_using_algorithm:インデックスで使用するアルゴリズムを指定します。visibility_option:インデックスの可視性を指定します。DATA_TABLE_ID [=] data_table_id:インデックスが属するデータテーブルのIDを指定します。INDEX_TABLE_ID [=] index_table_id:インデックステーブルのIDを指定します。MAX_USED_PART_ID [=] used_part_id:インデックスの最大使用済みパーティションIDを指定します。physical_attributes_option:インデックスの物理属性オプションを定義します。parallel_option:インデックスの並列状況を指定します。PARALLEL [=] integer:並列実行のレベルを指定します。integerは整数で、実行の並列度を表します。NOPARALLEL:並列実行を無効にすることを指定します。
index_column_group_option
WITH COLUMN GROUP(all columns, each column):行ストアインデックスの冗長化インデックスを作成することを指定します。WITH COLUMN GROUP(all columns):行ストアインデックスを作成することを指定します。WITH COLUMN GROUP(each column):列ストアインデックスを作成することを指定します。
例
以下のSQLステートメントを使用して、テーブルにカラムストアインデックスを作成します。
以下のSQLステートメントを使用して、テーブル
TEST_TBL2を作成します。CREATE TABLE TEST_TBL2 (col1 NUMBER, col2 VARCHAR2(50));TEST_TBL2テーブルに、col1列を参照するカラムストアインデックスIDX_TEST_TBL2_COL1を作成します。CREATE INDEX IDX_TEST_TBL2_COL1 ON TEST_TBL2 (col1) WITH COLUMN GROUP(each column);