説明
このステートメントはインデックスを作成するために使用されます。インデックスとは、テーブル上に作成されるものであり、データベーステーブル内の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 | Hintオプションを指定します。これはオプションです。現在、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);