CREATE INDEX文
CREATE INDEX文は、指定された表の指定された列に新しい索引を生成します。
構文
create_index_statement ::=
CREATE INDEX [IF NOT EXISTS] index_name
ON table_name "(" path_list ")" [WITH NO NULLS][comment
]
index_name ::= id
path_list ::= index_path ("," index_path)*
index_path ::=
name_path [path_type] |
multikey_path_prefix [.name_path] [path_type]
name_path ::= field_name ("." field_name)*
field_name ::= id
| DSTRING
multikey_path_prefix ::=
field_name ( ("." field_name) | ("[" "]") | ("." VALUES"("")" ) )*
( ("[" "]") | ("." VALUES"(""")" ) | ("." KEYS"(""")") )
path_type ::= AS
(INTEGER | LONG | DOUBLE | STRING |
BOOLEAN | NUMBER | ANYATOMIC |POINT | GEOMETRY)
セマンティクス
索引名は表に対して一意です。同じ名前の索引が表にすでに存在する場合、文は失敗し、エラーがレポートされます。たとえば、UserInfo
表にはmyindex1
という名前の索引のみを含めることができます。
索引名は表に固有です。複数の表で同じ索引名を使用できます。たとえば、UserInfo
表とUsers3
表で同じ索引名myindex1
を使用できます。
索引指定は表に対して一意です。同じ指定の索引が表にすでに存在する場合、文は失敗し、エラーがレポートされます。
UserInfo
表に次のmyindex1
索引がある場合、 CREATE INDEX myindex1 ON UserInfo (info.income AS ANYATOMIC);
myindex2
索引が別の名前の既存の索引と重複しているというエラーをスローします。この場合、索引名が異なっていても、索引の指定は同じです。 CREATE INDEX myindex2 ON UserInfo(info.income AS ANYATOMIC);
オプションのIF NOT EXISTS句がCREATE INDEX文で指定され、同じ名前の索引が存在する場合、その文は実行されず、エラーはレポートされません。
CREATE INDEX文にオプションのWITH NO NULLS句が指定されている場合、索引付きフィールドにNULL値またはEMPTY値(あるいはその両方)を持つ行は索引付けされません。
WITH NO NULLS句を使用して作成された索引は、索引付けされたフィールドにNULL値またはEMPTY値(あるいはその両方)が大量に含まれている場合に便利です。これにより、索引付け時の時間と領域のオーバーヘッドが削減されます。ただし、問合せによるこのような索引の使用は制限されています。詳細は、「問合せの最適化での索引の使用」の項を参照してください。
オプションのCOMMENTが指定されている場合、これは索引メタデータの一部になり、解釈されません。"comment"は、DESCRIBE文の出力に表示されます。
JSONデータが索引付けされている場合は、JSONデータへのすべての索引パスの横にあるASキーワードを使用してデータ型を指定する必要があります。他のすべての型付きデータの場合、データ型は表スキーマから推測されるため、データ型を指定しないでください。
指定した表で行が挿入、削除または更新されると、索引エントリが自動的に更新されます。
ノート: 行ごとに生成される索引キーの最大数は10000です。生成される行ごとの索引キーの数が10000を超える場合、索引付け時にIllegalArgumentException
が発生します。