説明
このステートメントは、インデックスを作成するために使用します。インデックスはテーブル上に作成され、データベーステーブルの1列または複数列の値をソートする構造です。主な役割はクエリの速度を向上させ、データベースシステムのパフォーマンスオーバヘッドを低減することです。
OceanBaseデータベースの現在のバージョンでサポートされているインデックスタイプには、一意インデックス、非一意インデックス、関数インデックス、カラムストアインデックス、空間インデックスが含まれます。インデックスを作成する際には、STORING(column_name,...) を使用してインデックステーブル上の冗長列を指定できます。インデックステーブルの冗長列には、ユーザーが追加を指定した列に加えて、自動的に主キーテーブルの主キー列も含まれます(主キーテーブルがない場合はHidden PKが含まれます)。インデックスに追加の列を格納することで、データベースオプティマイザーにより多くの選択肢を提供できます。
説明
OceanBaseデータベースのOracleモードでは、インデックスで参照されている列をテーブルから削除すると、作成されたインデックスは無効になります。
権限要件
CREATE INDEX ステートメントを実行してインデックスを作成するには、現在のユーザーが対象オブジェクトに対する少なくともINDEX権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。
構文
create_index_stmt:
CREATE [hint_options] [UNIQUE] INDEX [schema.]index_name
[USING BTREE] ON [schema.]table_name (sort_column_key [, sort_column_key...])
[INDEXTYPE IS MDSYS.SPATIAL_INDEX] [index_option...] [partition_option] [index_column_group_option];
create_fulltext_index_stmt:
CREATE INDEX [schema.]index_name ON [schema.]table_name(column_name)
INDEXTYPE IS CTXSYS.CONTEXT
[PARAMETERS('LEXER parser_name')]
LOCAL;
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)
parser_name:
SPACE
| NGRAM
| NGRAM2
| IK
| BENG
パラメータ説明
パラメータ項目 |
説明 |
|---|---|
| create_index_stmt | インデックス作成文を表します。 |
| hint_options | ヒントオプションを指定します。このオプションはオプションです。現在、parallelのみの使用がサポートされています。例:/*+ parallel(10) */。 |
| UNIQUE | オプションです。一意インデックスを作成する場合に指定します。 |
| schema. | オプションです。他のスキーマのテーブルにインデックスを作成する必要がある場合は、そのスキーマ名を追加する必要があります。schema. を省略した場合、デフォルトでそのインデックス/テーブルは現在のスキーマに存在します。 |
| 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 を参照してください。 |
| create_fulltext_index_stmt | フルテキストインデックス作成文を表します。
説明OceanBaseデータベースV4.4.2バージョンでは、OracleモードはV4.4.2 BP2バージョンからフルテキストインデックスの作成をサポートしています。 |
| PARAMETERS('LEXER parser_name') | オプションです。フルテキストインデックスの分かち書きを指定します。PARAMETERS('LEXER parser_name') を明示的に指定しない場合、分かち書きはデフォルトで SPACE となり、英語などスペースで意味が区切られる言語に適用されます。parser_name は分かち書きの名前を表します。詳細については、以下の parser_name を参照してください。 |
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):カラムストアインデックスを作成することを指定します。
parser_name
SPACE:デフォルト値で、スペースに基づいて分かち書きを行います。NGRAM:N-Gram(中国語)に基づく分かち書き方式を表します。NGRAM2:テキストを設定された範囲の連続する文字に分割します。IK:IK(中国語)に基づく分かち書き方式を表します。BENG:Beng(基本英語)に基づく分かち書き方式を表します。
例
以下の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);