説明
このステートメントは、インデックスを作成するために使用されます。インデックスとは、テーブル上に作成されるものであり、データベーステーブル内の1列または複数の列の値をソートするための構造です。その主な役割は、クエリの速度を向上させ、データベースシステムのパフォーマンスオーバーヘッドを低減することにあります。
OceanBaseデータベースの現行バージョンがサポートするインデックスタイプには、一意インデックスと非一意インデックスが含まれます。インデックスを作成する際には、STORING(column_name,...) を使用してインデックステーブル上の冗長列を指定できます。インデックステーブルの冗長列には、ユーザーが追加した列に加えて、主キーテーブルの主キー列も自動的に追加されます(主キーテーブルがない場合はHidden PKが含まれます)。インデックスに追加されたこれらの列は、データベースオプティマイザーにより多くの選択肢を提供し、パフォーマンスの最適化に寄与します。
制限事項と注意点
- テーブル内のすべてのインデックス列を削除すると、作成されたインデックスは無効になります。
- フルテキストインデックスは、
CHAR、VARCHAR、およびTEXTタイプの列にのみ適用できます。 - 現在のバージョンでは、ローカル(
LOCAL)フルテキストインデックスのみをサポートしています。 - フルテキストインデックスを作成する際には、
UNIQUEキーワードを指定することはできません。 - 複数の列にまたがるフルテキストインデックスを作成する場合は、これらの列が同一の文字セットを持っている必要があります。
WITH PARSER {SPACE | NGRAM | BENG | IK}でパーサーを指定できるのは、フルテキストインデックスを作成する場合のみです。
権限要件
CREATE INDEX ステートメントを実行してインデックスを作成するには、現在のユーザーが対応するオブジェクトに対する少なくともINDEX権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
CREATE [hint_options] [index_type] INDEX [IF NOT EXISTS] index_name
[USING BTREE] ON table_name (sort_column_key [, sort_column_key... ])
[WITH PARSER tokenizer_option]
[PARSER_PROPERTIES[=](parser_properties_list)]
[index_option...] [partition_option] [index_column_group_option]
index_type:
SPATIAL
| UNIQUE
| FULLTEXT
sort_column_key:
column_name [(integer)] [ASC] [ID id]
| (index_expr) [ASC] [ID id]
tokenizer_option:
SPACE
| NGRAM
| BENG
| IK
| NGRAM2
parser_properties_list:
parser_properties, [parser_properties]
parser_properties:
min_token_size = int_value
| max_token_size = int_value
| ngram_token_size = int_value
| ik_mode = 'char_value'
| min_ngram_size = int_value
| max_ngram_size = int_value
index_option:
GLOBAL
| LOCAL
| BLOCK_SIZE integer
| COMMENT STRING_VALUE
| STORING (column_name [, column_name...])
| WITH_ROWID
| WITH PARSER STRING_VALUE
| index_using_algorithm
| visibility_option
| DATA_TABLE_ID data_table_id
| INDEX_TABLE_ID index_table_id
| VIRTUAL_COLUMN_ID virtual_column_id
| MAX_USED_PART_ID used_part_id
index_column_group_option:
WITH COLUMN GROUP([all columns, ]each column)
パラメータの説明
| パラメータ | 説明 |
|---|---|
| hint_options | Hintオプションを指定します。これはオプションです。現在、parallelのみサポートされており、例えば/*+ parallel(10) */と指定します。 |
| index_type | オプションで、インデックスのタイプを指定します。タイプ情報の詳細については、以下のindex_typeを参照してください。 |
| IF NOT EXISTS | インデックスが既に存在する場合、作成しないことを示します。インデックスを作成する際、インデックスが存在しIF NOT EXISTSが指定されていない場合、エラーが発生します。 |
| index_name | 作成するインデックスの名前を指定します。 |
| USING BTREE | オプションで、インデックス作成時にB-treeインデックス構造を使用することを示します。
説明現在、 |
| table_name | インデックスを作成するテーブルを指定します。テーブル名を直接指定することも、schema_name.table_name形式でテーブル名とテーブルが属するデータベース名を指定することもできます。 |
| sort_column_key | ソート列のキーを指定します。インデックス作成時に複数のソート列を指定でき、複数のソート列は英字のカンマ(,)で区切ります。詳細については、以下のsort_column_keyを参照してください。 |
| WITH PARSER tokenizer_option | オプションで、全文インデックスのトークナイザーを指定します。詳細については、以下のtokenizer_optionを参照してください。 |
| PARSER_PROPERTIES[=](parser_properties_list) | オプションで、トークナイザーのプロパティを指定します。詳細については、以下のparser_propertiesを参照してください。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからトークナイザーのプロパティ( |
| index_option | インデックスオプションを指定します。インデックス作成時に複数のインデックスオプションを指定でき、複数のインデックスオプションは英字のスペースで区切ります。詳細については、以下のindex_optionを参照してください。 |
| partition_option | インデックスパーティションを作成するオプションを指定します。ハッシュパーティション、キーパーティション、範囲パーティション、リストパーティション、外部テーブルパーティションを指定できます。 |
| index_column_group_option | インデックスオプションを指定します。詳細については、以下のindex_column_group_optionを参照してください。 |
index_type
SPATIAL:このキーワードは、空間インデックスの作成を指定するために使用されます。UNIQUEこのキーワードは、一意のインデックスの作成を指定するために使用されます。FULLTEXT:このキーワードは、全文インデックスの作成を指定するために使用されます。
異なる種類のインデックスの作成方法については、インデックスの作成を参照してください。
sort_column_key
column_name [(integer)] [ASC] [ID id]:ソートキーとして1つの列名を指定します。column_name:ソート対象の列名を示します。integer:オプションで、ソートキーの長さ制限を示します。ASC:オプションで、昇順ソートを示します。現在、降順(DESC)ソートはサポートされていません。ID id:オプションで、ソートキーのID番号を示します。
例えば、
t3という名前のテーブルにindex3という名前のインデックスを作成し、そのインデックスがc1列に基づいて昇順でソートされるように指定します。CREATE INDEX index3 ON t3 (c1 ASC);(index_expr) [ASC] [ID id]:ソートキーとして1つのインデックス式を指定します。インデックス式は式または関数を使用して定義できます。以下のオプションを含むことができます:(index_expr):インデックス式を示し、c1=c1のようなブール式を許容します。OceanBaseデータベースの現行バージョンでは、生成列上の関数ベースのインデックスの作成は禁止されています。関数ベースのインデックスでサポートされる式については、関数ベースのインデックスがサポートするシステム関数のリストを参照してください。ASC:オプションで、昇順ソートを示します。現在、降順(DESC)ソートはサポートされていません。ID id:オプションで、ソートキーのID番号を示します。
例えば、
t4という名前のテーブルにindex4という名前のインデックスを作成し、c1+c2をインデックス式として指定し、昇順でソートします。CREATE INDEX index4 ON t4 ((c1 + c2) ASC);
インデックス作成時に複数のソート列を指定でき、複数のソート列は英字のカンマ(,)で区切ります。例えば、t5 という名前のテーブルに index5 という名前のインデックスを作成し、c1 列と c2+c3 式をインデックスのソートキーとして指定します。
CREATE INDEX index5 ON t5 (c1, (c2+c3));
tokenizer_option
SPACE:デフォルト値で、スペースに基づいて単語分割を行うことを示します。以下のプロパティを指定できます。プロパティ 値の範囲 min_token_size [1, 16] max_token_size [10, 84] NGRAM:N-Gram(中国語)に基づく単語分割方式を示します。以下のプロパティを指定できます。プロパティ 値の範囲 ngram_token_size [1, 10] NGRAM2:テキストをmin_ngram_size~max_ngram_sizeの範囲の連続する文字列に分割することを示します。以下のプロパティを指定できます。プロパティ 値の範囲 min_ngram_size [1, 16] max_ngram_size [1, 16] 説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2バージョンから
NGRAM2単語分割器がサポートされています。BENG:Beng(基本的な英語)に基づく単語分割方式を示します。以下のプロパティを指定できます。プロパティ 値の範囲 min_token_size [1, 16] max_token_size [10, 84] IK:IK(中国語)に基づく単語分割方式を示します。現在はutf-8文字セットのみサポートしています。以下のプロパティを指定できます。プロパティ 値の範囲 ik_mode smartmax_word
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP1バージョンから
IK単語分割器がサポートされています。
TOKENIZE関数を使用して、指定された単語分割器およびJSON形式のパラメータに基づくテキストの単語分割結果を確認できます。
parser_properties
min_token_size:最小トークン長を表します。デフォルト値は3で、値の範囲は1から16です。max_token_size:最大トークン長を表します。デフォルト値は84で、値の範囲は10から84です。ngram_token_size:NGRAMのトークン長を表します。このパラメータはNGRAMパーサーにのみ有効です。デフォルト値は2で、値の範囲は1から10です。ik_mode:IKパーサーのトークン化モードを表します。値は以下のとおりです:smart:デフォルト値。辞書内の単語がトークン化の正確性を向上させるために使用され、辞書内の単語境界が優先的に考慮されるため、不必要な拡張が減少する可能性があります。max_word:辞書で定義された単語が認識されますが、トークン化の最大拡張には影響しません。辞書に定義があっても、max_wordモードはテキストをより多くの単語に分割しようとします。
例:
テーブル
tbl1を作成します。CREATE TABLE tbl1 (col1 VARCHAR(200), col2 TEXT);テーブル
tbl1の列col2に全文インデックスを作成し、IKパーサーを使用することを指定します。同時に、PARSER_PROPERTIESを使用してパーサーのプロパティを設定します。CREATE FULLTEXT INDEX fidx_tbl1 ON tbl1(col2) WITH PARSER IK PARSER_PROPERTIES=(ik_mode='max_word');
index_option
GLOBAL:グローバルインデックスを作成することを表します。LOCAL:ローカルインデックスを作成することを表します。BLOCK_SIZE integer:インデックスブロックのサイズ、つまり各インデックスブロック内のバイト数を指定します。COMMENT STRING_VALUE:インデックスにコメントを追加します。STORING (column_name [, column_name...]):インデックスに格納する列を指定します。複数の列は英字のカンマ(,)で区切ります。WITH_ROWID:行識別子を含むインデックスを作成します。WITH PARSER STRING_VALUE:インデックスに必要なパーサーを指定します。index_using_algorithm:インデックスで使用するアルゴリズムを指定します。USING BTREEまたはUSING HASHを指定できます。ただし、USING HASHを使用して複数値インデックスを作成することはできません。visibility_option:インデックスの可視性を指定します。DATA_TABLE_ID data_table_id:インデックスが属するデータテーブルのIDを指定します。INDEX_TABLE_ID index_table_id:インデックステーブルのIDを指定します。VIRTUAL_COLUMN_ID virtual_column_id:仮想列のIDを指定します。MAX_USED_PART_ID used_part_id:インデックスの最大使用パーティションIDを指定します。
index_column_group_option
WITH COLUMN GROUP(all columns, each column):行ストアとカラムストアの冗長性を持つインデックスを作成することを指定します。WITH COLUMN GROUP(each column):カラムストアインデックスを作成することを指定します。
例
次のSQLステートメントを使用して、テーブルにカラムストアインデックスを作成します。
以下のSQLステートメントを使用して、テーブル
test_tbl1を作成します。CREATE TABLE test_tbl1 (col1 INT, col2 VARCHAR(50));test_tbl1テーブルに、col1列を参照するカラムストアインデックスidx1_test_tbl1を作成します。CREATE INDEX idx1_test_tbl1 ON test_tbl1 (col1) WITH COLUMN GROUP(each column);