データ定義言語

次の操作には Cloud Spanner のデータ定義言語(DDL)を使います。

  • データベースを作成します。
  • データベース内でテーブルを作成、変更、または削除します。
  • テーブルの列を追加、変更、または削除します。
  • データベースのインデックスを作成または削除します。

DDL 構文

statement:
    { create_database | alter_database | create_table | create_index | alter_table | drop_table | drop_index }

create_database:
    CREATE DATABASE database_id

alter_database:
    ALTER DATABASE database_id
    action

where action is:
    SET OPTIONS ( optimizer_version = { 1 ... 2 | null } )

create_table:
    CREATE TABLE ( [
       { column_name data_type [NOT NULL] [AS ( expression ) STORED] [ options_def ]
       | table_constraint }
       [, ... ]
    ] ) PRIMARY KEY ( [ column_name [ { ASC | DESC } ], ...] )
    [, INTERLEAVE IN PARENT table_name [ ON DELETE { CASCADE | NO ACTION } ] ]

    where data_type is:
        { scalar_type | array_type }

    and options_def is:
        { OPTIONS ( allow_commit_timestamp = { true | null } ) }

    and table_constraint is:
        [ CONSTRAINT constraint_name ]
        { CHECK ( expression ) |
          FOREIGN KEY ( column_name [, ... ] ) REFERENCES ref_table ( ref_column [, ... ] ) }

create_index:
    CREATE [ UNIQUE ] [ NULL_FILTERED ] INDEX index_name
    ON table_name ( key_part [, ...] ) [ storing_clause ] [ , interleave_clause ]

    where index_name is:
        {a—z|A—Z}[{a—z|A—Z|0—9|_}+]

    and key_part is:
        column_name [ { ASC | DESC } ]

    and storing_clause is:
        STORING ( column_name [, ...] )

    and interleave_clause is:
        INTERLEAVE IN table_name

alter_table:
    ALTER TABLE table_name
    action [, ... ]

    where action is:
        ADD [ COLUMN ] column_name data_type [ NOT NULL ] [AS ( expression ) STORED] [ options_def ]
        DROP [ COLUMN ] column_name
        ADD table_constraint
        DROP CONSTRAINT constraint_name
        SET ON DELETE { CASCADE | NO ACTION }
        ALTER [ COLUMN ] column_name { { data_type } [ NOT NULL ] | SET [ options_def ] }

    and data_type is:
        { scalar_type | array_type }

    and options_def is:
        { OPTIONS ( allow_commit_timestamp = { true | null } ) }

    and table_constraint is:
        [ CONSTRAINT constraint_name ]
        { CHECK ( expression ) |
          FOREIGN KEY ( column_name [, ... ] ) REFERENCES ref_table ( ref_column [, ... ] ) }

drop_table:
    DROP TABLE table_name

drop_index:
    DROP INDEX index_name

scalar_type:
    { BOOL | INT64 | FLOAT64 | NUMERIC | STRING( length ) | BYTES( length ) | DATE | TIMESTAMP }

length:
    { int64_value | MAX }

array_type:
    ARRAY< scalar_type >

int64_value:
    { decimal_value | hex_value }

decimal_value:
    [-]0—9+

hex_value:
    [-]0x{0—9|a—f|A—F}+

database_id:
    {a—z}[{a—z|0—9|_|-}+]{a—z|0—9}

table_name, column_name, index_name:
    {a—z|A—Z}[{a—z|A—Z|0—9|_}+]

表記:

  • 角括弧「[ ]」はオプションの句です。
  • 丸括弧「( )」はリテラルの括弧を表します。
  • 縦線「|」は論理 OR を表します。
  • 波括弧「{ }」ではオプションのセットを囲みます。
  • カンマの後の省略記号は、カンマ区切りのリストとして、前の項目を繰り返すことができることを示しています。item [, ...] は 1 つ以上の項目を示し、[item, ...] は 0 個以上の項目を示します。
  • カンマ「,」はリテラルなカンマを示します。
  • 山括弧「<>」はリテラルな山括弧を表します。
  • ダッシュ「—」は、2 つの値の間の範囲を示します。
  • プラス記号「+」は、前の項目を繰り返すことができることを表します。

予約済みキーワード

型名など、一部の単語は Cloud Spanner の DDL で予約されています。予約済みキーワードをスキーマの識別子として使用する場合、それをバッククォート(`)で囲んでください。Cloud Spanner での予約済みキーワードの一覧については、語彙の構造と構文をご覧ください。

例:

CREATE TABLE MyTable (
  RowId INT64 NOT NULL,
  `Int64` INT64
) PRIMARY KEY (RowId);

命名規則

次のルールは、テーブル、列、インデックス、外部キーの制約名に適用されます。

  • 1~128 文字にする必要があります。

  • 先頭は大文字または小文字にしてください。

  • 大文字、小文字、数字、アンダースコアは使用できますが、ハイフンは使用できません。

  • 同じ名前の Cloud Spanner オブジェクトを 2 つ作成することはできません。これには、大文字小文字表記のみが異なる名前も含まれます。たとえば、次のスニペットの 2 番目のステートメントは、テーブル名の大文字と小文字の区別のみが異なるため失敗します。

    CREATE TABLE MyTable (col1 INT64) PRIMARY KEY (col1);
    CREATE TABLE MYTABLE (col1 INT64) PRIMARY KEY (col1);
    
  • DDL ステートメントで他のスキーマ オブジェクト(たとえば、主キーの列名、インデックスのテーブル名と列名など)を参照する場合、各エンティティの名前は元の大文字小文字表記を使用します。たとえば、次のステートメントで作成されたテーブル Singers について考えてみましょう。

    CREATE TABLE Singers (
      SingerId   INT64 NOT NULL,
      FirstName  STRING(1024),
      LastName   STRING(1024),
      SingerInfo BYTES(MAX),
      BirthDate  DATE,
    ) PRIMARY KEY(SingerId);
    

    次のコマンドは、Singers テーブルの大文字小文字表記が異なるため、メッセージ Table not found: singers が出力されて失敗します。

    CREATE INDEX SingersByFirstLastName ON singers(FirstName, LastName)
    
  • Cloud Spanner スキーマ オブジェクト名は、SQL クエリでは大文字と小文字が区別されません。たとえば、次のステートメントで作成されたテーブル MyTable2 について考えてみましょう。

    CREATE TABLE MyTable2 (col1 INT64) PRIMARY KEY (col1);
    

    次のクエリでは、スキーマ オブジェクト名の大文字と小文字が区別されないため、すべて成功します。

    SELECT col1 FROM MyTable2 LIMIT 1
    SELECT COL1 FROM MYTABLE2 LIMIT 1
    SELECT COL1 FROM mytable2 LIMIT 1
    INSERT INTO MYTABLE2 (col1) VALUES(1)
    

DATABASE ステートメント

データベースの作成

Cloud Spanner データベースを作成するときには、データベースの ID を定義する CREATE DATABASE ステートメントを指定する必要があります。

CREATE DATABASE database_id

where database_id
    {a—z}[{a—z|0—9|_|-}+]{a—z|0—9}

パラメータ

database_id

データベースの変更

テーブルの定義を変更します。

構文

ALTER DATABASE database_id
    action

where database_id is:
    {a—z}[{a—z|0—9|_|-}+]{a—z|0—9}

and action is:
    SET OPTIONS ( optimizer_version = { 1 ...  2 | null } )

説明

ALTER DATABASE は、既存のデータベースの定義を変更します。

SET OPTIONS

  • この句を使用して、スキーマ階層のデータベース レベルのオプションを設定します。

パラメータ

database_id

  • 属性を変更するデータベースの名前。名前がハイフンを含む文字列または予約語の場合は、バッククォート(`)で囲みます。データベースの命名規則について詳しくは、このドキュメントの命名規則をご覧ください。

options_def

  • ( optimizer_version = { 1 ... 2 | null } ) オプションでは、使用するクエリ オプティマイザーのバージョンを指定できます。デフォルトでは、これはオプティマイザーの最新バージョンですが、使用可能なオプティマイザーのバージョンを指定できます。このオプションを null に設定すると、最新バージョン(現在は 2)に設定されます。詳細については、クエリ オプティマイザーをご覧ください。

データ型

スカラー

DDL でスカラー型を使用する構文は次のとおりです。

{ BOOL | INT64 | FLOAT64 | NUMERIC | STRING( length ) | BYTES( length ) | DATE | TIMESTAMP }

length:
    { int64_value | MAX }

int64_value:
    { decimal_value | hex_value }

decimal_value:
    [-]0—9+

hex_value:
    [-]0x{0—9|a—f|A—F}+

int64_value は -9,223,372,036,854,775,808(-263)~9,223,372,036,854,775,807(263 − 1)の整数に対応している必要があります。10 進表記または 16 進表記で指定できます。16 進数形式では、0x 接頭辞、小文字の x が必要です。

STRING

STRING は、可変長の Unicode 文字列です。その値は有効な Unicode 文字列でなければなりません。長さが必要で、フィールドに保管できる Unicode 文字の最大数(バイト数ではない)を表します。

注:

  • 列への書き込みは検証され、新しい値が有効な Unicode 文字列でない場合と、指定された長さを超えている場合には書き込みが拒否されます。

  • length は範囲 [1, 2621440](2.5 MB)で整数に設定できます。

  • 長さが予測できないフィールドや制約が不要なフィールドでは、length を値 MAX に設定すると便利です。この値は、検証目的の場合は 2621440 に該当します。

    保存される文字列の実際の長さだけがストレージ コストに影響します。MAX を使用しても、使用されるストレージ容量は増加しません。

  • Cloud Spanner ではサーバーで受信したときに Unicode 文字列を UTF-8 エンコードに変換する必要があります。

  • 照合は Unicode 文字の数値(厳密には、コードポイント文字が組み合わされるため、Unicode 文字の数値とは微妙に異なります)を基準にして行われます。ASCII 文字列の場合、従来の並べ替え順となります。

  • テーブルを作成した後で列の長さを短くできますが、その場合、Cloud Spanner で既存のデータが長さの制約に対応していることを検証しなければなりません。

BYTES

BYTES は可変長のバイナリ文字列です。長さが必要で、フィールドに保管できる最大のバイト数を表します。

注:

  • 列への書き込みは検証され、新しい値が指定された長さを超えている場合には書き込みが拒否されます。

  • length は範囲 [1, 10485760](10 MB)の整数または便利な値である MAX に設定できます。この値は、検証目的の場合は 10485760 に該当します。

    保存される実際のバイト数だけがストレージ コストに影響します。MAX を使用しても、使用されるストレージ容量は増加しません。

  • テーブルを作成した後で列の長さを短くできますが、その場合、Cloud Spanner で既存のデータが長さの制約に対応していることを検証しなければなりません。

日付

  • タイムゾーンに依存しない日付。
  • 有効な日付の範囲は [0001-01-01, 9999-12-31] です。値がこの範囲外の場合、データ列への書き込みは拒否されます。
  • 詳細と正規形式については、データ型をご覧ください。

タイムスタンプ

  • ナノ秒精度のタイムスタンプ。
  • タイムゾーンに依存しません。範囲は [0001-01-01 00:00:00~10000-01-01 00:00:00] です。
  • 詳細と正規形式については、データ型をご覧ください。

配列

DDL で ARRAY データ型を使用する構文は次のようになります。

ARRAY< scalar_type >

Cloud Spanner はスカラーの配列をサポートします。配列の主な目的は、スペースを効率的に使用する方法で値のコレクションを保存することです。配列は個々の要素にアクセスできるように設計されていません。1 つの要素を読み取り / 書き込みするためには、配列全体を読み取り / 書き込みする必要があります。

アプリケーションがベクトルや繰り返しフィールドのようなデータ構造を使用する場合、Cloud Spanner 配列でその状態を容易に持続できます。

ARRAY 型の複数の列を使用する Singers の代替定義は次のとおりです。

CREATE TABLE Singers (
  SingerId INT64,
  FeaturedSingerIds ARRAY<INT64>,
  SongNames ARRAY<STRING(MAX)>,
) PRIMARY KEY (SingerId) ...;

注:

  • サブタイプ ARRAY を持つ配列(ネストされた配列)はサポートされていません。
  • スカラー値のような配列は、合計 10 MiB 以下にする必要があります。
  • 配列はキー列として使用できません。
  • CREATE TABLE ステートメントで、NOT NULL アノテーションを使用して ARRAY 型の列を作成できます。

    テーブルを作成した後、NOT NULL アノテーションを使用して ARRAY 型の列を追加することはできません。また、NOT NULL アノテーションを ARRAY 型の既存の列に追加することもできません。

TABLE ステートメント

テーブルの作成

新しいテーブルを定義します。

構文

CREATE TABLE table_name ( [
   { column_name data_type [ NOT NULL ] [AS ( expression ) STORED] [ options_def ]
   | table_constraint }
   [, ... ]
] ) PRIMARY KEY ( [column_name [ { ASC | DESC } ], ...] )
[, INTERLEAVE IN PARENT table_name [ ON DELETE { CASCADE | NO ACTION } ] ]

where data_type is:
    { scalar_type | array_type }

and options_def is:
    { OPTIONS ( allow_commit_timestamp = { true | null } ) }

and table_constraint is:
    [ CONSTRAINT constraint_name ]
    { CHECK ( expression ) |
      FOREIGN KEY ( column_name [, ... ] ) REFERENCES  ref_table  ( ref_column [, ... ] ) }

説明

CREATE TABLE は、現在のデータベースに新しいテーブルを定義します。

パラメータ

table_name

  • 作成されるテーブルの名前。命名のガイダンスについては、命名規則をご覧ください。

column_name

  • 作成される列の名前。命名のガイダンスについては、命名規則をご覧ください。

data_type

NOT NULL

  • このオプションの列アノテーションでは、新しい行を挿入するすべてのミューテーションで列が必要であることを指定します。

  • 既存のテーブルには NOT NULL 列を追加できませんほとんどの型の列で、この制限を回避できます。

    • ARRAY 型の列で NOT NULL アノテーションを使用できるのは、テーブルを作成するときのみです。その後、ARRAY 型の列に NOT NULL アノテーションを追加することはできません。

    • 他のすべての列の型では、NULL 値を指定できる列を追加し、すべての行に値の書き込みを実行してその列を埋めると、その列の NOT NULL アノテーションでスキーマを更新できます。

AS ( expression ) STORED

  • この句は、生成された列として列を作成します。この列は、同じ行の他の列の関数として値が定義されている列です。

  • は、列のデータ型に割り当てる有効な SQL 式です。ただし、次の制限があります。

  • 式の後に STORED 属性を指定すると、テーブルの他の列と一緒に関数の結果が保存されます。その後、参照されるいずれかの列に対して更新を行うと、式が再評価、保存されます。

  • STORED 属性のない生成された列は使用できません。

  • 生成された列に直接書き込むことはできません。

  • 生成された列は、主キーとして、またはその一部として使用できません。ただし、セカンダリ インデックス キーとしては使用できます。

  • 生成された列、または生成された列によって参照される列では、列オプション allow_commit_timestamp を使用できません。

  • 生成された列のデータ型や、生成された列によって参照される列は変更できません。

  • 生成された列で参照される列は削除できません。

生成された列の操作方法の例については、生成された列の作成と管理をご覧ください。

PRIMARY KEY ( [column_name[ { ASC | DESC } ], ...]

  • すべてのテーブルには主キーが必要であり、主キーはそのテーブルのゼロ個以上の列で構成できます。

  • 主キー列に DESC 注釈を追加すると、昇順(デフォルト)から降順にデータの物理的なレイアウトが変更されます。

詳細については、スキーマとデータモデルをご覧ください。

[, INTERLEAVE IN PARENTtable_name[ ON DELETE { CASCADE | NO ACTION } ] ]

  • この句は、子から親へのテーブル関係を定義します。結果として、親と子の行が物理的にインターリーブされます。名前とデータ型の両方において、親の主キー列は子の主キー列の接頭辞と位置的に一致しなければなりません。子テーブルに行を追加するときに、対応する親の行が存在しない場合は失敗します。親の行は、データベースにすでに存在する場合と、同じトランザクションで子の行を挿入する前に挿入される場合があります。

  • ON DELETE 句は、ミューテーションで親の行の削除を試行するときの ChildTable 内の行の動作を定義します。この句は省略可能です。次のオプションを使用できます。

    • CASCADE: 子行が削除されます。

    • NO ACTION: 子行は削除されません。親を削除すると子行が残る場合、親子の参照整合性が失われ、書き込みに失敗します。

    ON DELETE 句は省略可能ですが、省略するとデフォルトの ON DELETE NO ACTION が使用されます。

詳細については、スキーマとデータモデルをご覧ください。

CONSTRAINTconstraint_name

  • テーブル制約の任意の名前。名前を指定しない場合、Cloud Spanner によって制約の名前が生成されす。生成された名前を含む制約名は、Cloud Spanner の情報スキーマからクエリできます。

CHECK (expression)

  • CHECK 制約を使用すると、1 つ以上の列の値がブール式を満たす必要があることを指定できます。

  • expression には、BOOL として評価される任意の有効な SQL 式を指定できます。

  • チェック制約の expression 条件には以下の制限が適用されます。

    • 式は、同じテーブルの列のみを参照できます。

    • 式では、少なくとも 1 つの生成されていない列を参照する必要があります。その際は、生成されていない列を直接参照するか、生成されていない列を参照する生成された列を通じて参照します。

    • この式では、allow_commit_timestamp オプションが設定されている列を参照できません。

    • 式にサブクエリを含めることはできません。

    • 式に CURRENT_DATE()CURRENT_TIMESTAMP() などの非決定性関数を含めることはできません。

  • 詳細については、チェック制約の作成と管理をご覧ください。

FOREIGN KEY (column_name[, ... ] ) REFERENCESref_table(ref_column[, ... ] )

  • この句を使用して外部キー制約を定義します。外部キーは関係の referencing テーブルで定義され、referenced テーブルを参照しています。2 つのテーブルの外部キー列は referencing 列と referenced 列と呼ばれ、その行の値はキーです。

  • 外部キー制約では、このテーブルの 1 つ以上の列には、参照先テーブルの参照先列の値のみを含める必要があります。

  • 外部キーを作成する際には、主キー全体が参照されていない限り、参照先テーブルに一意の制約が自動的に作成されます。一意の制約を満たすことができない場合、スキーマ全体の変更は失敗します。

  • 参照元列と参照先列の数は同じでなければなりません。順序も重要です。つまり、最初の参照元列は最初の参照先列を、2 番目の参照元列は 2 番目の参照先列を参照し、以降の列でも同様に参照を行います。

  • 参照元列と参照先列は、一致する型を持ち、等式演算子(=)をサポートしている必要があります。これらの列はインデックス登録可能であることも必要です。 ARRAY 型の列は使用できません。

  • allow_commit_timestamp=true オプションを使用して列に外部キーを作成することはできません。

詳細については、外部キーをご覧ください。

OPTIONS ( allow_commit_timestamp = { true | null } )

  • allow_commit_timestamp オプションを使用すると、挿入オペレーションと更新オペレーションで、Cloud Spanner がトランザクションの commit タイムスタンプを列に書き込むようにリクエストできます。詳しくは、commit タイムスタンプをご覧ください。

テーブルの変更

テーブルの定義を変更します。

構文

ALTER TABLE table_name
    action [, ... ]

where action is:
    ADD [ COLUMN  ] column_name data_type [ NOT NULL]  [AS ( expression ) STORED] [ options_def ]
    DROP [ COLUMN ] column_name
    ADD table_constraint
    DROP CONSTRAINT constraint_name
    SET ON DELETE { CASCADE | NO ACTION }
    ALTER [ COLUMN ] column_name { { data_type } [ NOT NULL ] | SET [ options_def ] }

and data_type is:
    { scalar_type | array_type }

and options_def is:
    { OPTIONS (allow_commit_timestamp = { true | null } ) }

and table_constraint is:
    [ CONSTRAINT constraint_name ]
    { CHECK ( expression ) |
      FOREIGN KEY ( column_name [, ... ] ) REFERENCES ref_table ( ref_column [, ... ] ) }

説明

ALTER TABLE は既存のテーブルの定義を変更します。

ADD COLUMN

  • CREATE TABLE と同じ構文を使用して、新しい列をテーブルに追加します。

DROP COLUMN

  • テーブルから列を破棄します。

  • 生成された列で参照される列は削除できません。

  • CHECK 制約によって参照される列を削除することはできません。 ADDtable_constraint

  • CREATE TABLE と同じ構文を使用して、新しい制約をテーブルに追加します。

  • 外部キーの場合、既存のデータが検証されてから外部キーが追加されます。既存の制約キーに対応する参照キーがない場合、または参照キーが一意でない場合、制約は違反となり、ALTER ステートメントは失敗します。

  • CHECK 制約の場合、新しいデータは制約に対して直ちに検証されます。既存のデータを制約に対して検証するために、長時間実行プロセスも開始されます。既存のデータが制約に準拠していない場合、チェック制約がロールバックされます。

  • チェック制約の expression 条件には以下の制限が適用されます。

    • 式は、同じテーブルの列のみを参照できます。

    • 式では、少なくとも 1 つの生成されていない列を参照する必要があります。その際は、生成されていない列を直接参照するか、生成されていない列を参照する生成された列を通じて参照します。

    • この式では、allow_commit_timestamp オプションが設定されている列を参照できません。

    • 式にサブクエリを含めることはできません。

    • 式に CURRENT_DATE()CURRENT_TIMESTAMP() などの非決定性関数を含めることはできません。

DROP CONSTRAINTconstraint_name

  • 該当する場合は、指定した制約および関連するインデックスをテーブルから破棄します。

SET ON DELETE { CASCADE | NO ACTION }

  • この変更は、親子の関係の子テーブルにのみ適用できます。詳細については、スキーマとデータモデルをご覧ください。

  • ON DELETE CASCADE 句は、親テーブルの行が削除された場合、このテーブル内の子行も自動的に削除されることを示します。 子行は、同じ主キーで始まるすべての行です。子テーブルにこのアノテーションがないか、アノテーションが ON DELETE NO ACTION の場合、親の行を削除するためには先に子の行を削除する必要があります。

ALTER COLUMN

  • テーブルの既存の列の定義を変更します。

パラメータ

table_name

  • 変更する既存のテーブルの名前。

column_name

  • 新しい列または既存の列の名前。テーブルのキー列は変更できません。

data_type

  • 新しい列のデータ型、または既存の列の新しいデータ型。

  • 生成された列のデータ型や、生成された列によって参照される列は変更できません。

  • CHECK 制約で参照される列ではデータ型を変更できません。options_def

  • (allow_commit_timestamp=true) オプションを使用すると、挿入オペレーションと更新オペレーションで、Cloud Spanner がトランザクションの commit タイムスタンプを列に書き込むようにリクエストできます。詳しくは、commit タイムスタンプをご覧ください。

table_constraint

  • テーブルに対する新しいテーブル制約。

constraint_name

  • 新しい制約または既存の制約の名前。

ref_table

  • 外部キー制約の参照先テーブル。

ref_column

  • 外部キー制約の参照先列。

テーブルの削除

テーブルを削除します。

構文

DROP TABLE table_name

説明

DROP TABLE ステートメントを使用して、データベースからテーブルを削除します。

  • DROP TABLE は元に戻せません。

  • インデックスが存在する場合や、テーブル内にインターリーブされているテーブルまたはインデックスが存在する場合は、テーブルを削除できません。

  • DROP TABLE ステートメントは、テーブルの外部キーと外部キー バッキング インデックスを自動的に削除します。

パラメータ

table_name

  • 削除するテーブルの名前。

INDEX ステートメント

インデックスを作成

セカンダリ インデックスを定義するには、CREATE INDEX ステートメントを使用します。

構文

CREATE [ UNIQUE ] [ NULL_FILTERED ] INDEX index_name
ON table_name ( key_part [, ...] ) [ storing_clause ] [ , interleave_clause ]

where index_name is:
    {a—z|A—Z}[{a—z|A—Z|0—9|_}+]

and key_part is:
    column_name [ { ASC | DESC } ]

and storing_clause is:
    STORING ( column_name [, ...] )

and interleave_clause is:
    INTERLEAVE IN table_name

説明

Cloud Spanner は、各テーブルの主キー列を自動的にインデックス登録します。

CREATE INDEX を使用して、他の列のセカンダリ インデックスを作成できます。セカンダリ インデックスを列に追加すると、その列のデータをより効率的に検索できるようになります。詳細については、セカンダリ インデックスをご覧ください。

パラメータ

UNIQUE

  • このセカンダリ インデックスがインデックスされるデータを UNIQUE 制約することを表します。この UNIQUE 制約により、重複したインデックス キーとなるトランザクションが拒否されます。詳細については、独自のインデックスをご覧ください。

NULL_FILTERED

  • このセカンダリ インデックスが NULL 値をインデックスしないことを表します。詳細については、NULL 値のインデックス登録をご覧ください。

index_name

  • 作成されるインデックスの名前。命名のガイダンスについては、命名規則をご覧ください。

table_name

  • インデックス登録するテーブルの名前。

INTERLEAVE IN

  • インデックスをインターリーブするテーブルを定義します。T がインデックスをインターリーブするテーブルの場合、以下を守らなければなりません。

    • T はインデックスされるテーブルの親でなければなりません。
    • T のプライマリキーはインデックスのキー接頭辞でなければなりません。

    いつインターリーブされたインデックスを作成すべきでしょうか。インデックス オペレーションに使用したいインデックス キーがテーブルのキーと一致し、そのテーブルの行が対応するインデックスされた行とデータの局所関連性を持つ場合、そのテーブルにインデックスをインターリーブする必要がある可能性があります。

    たとえば、インデックスからある歌手の歌をフェッチするときにその歌手に関する情報を頻繁にフェッチする場合、Singers の特定の行に対する Songs のすべての行をインデックスする必要があるとすると、インデックス キーには SingerIdSongName が含まれ、インデックスは Singers でインターリーブするための最適な候補となります。セカンダリ インデックスの作成に記載されている SongsBySingerSongName の定義は、こうしたインターリーブされるインデックスを作成する例です。

    インターリーブされたテーブルのように、インターリーブされたインデックスのエントリはその親テーブルの対応する行と一緒に保存されます。詳細はデータベースの分割をご覧ください。

DESC

  • 対応するインデックス列の降順のスキャンを定義します。DESC の印が付いたインデックス列を使ってテーブルをスキャンすると、スキャンされた行はそのインデックス列に対し降順で表示されます。並べ替えの順序を指定しない場合、昇順(ASC)がデフォルトとなります。

STORING

  • テーブルにある 1 つ以上のセカンダリ インデックスにテーブルのデータを複製するためのメカニズムを提供します。インデックス内の要求されたエントリを探した後にメインテーブルからデータを取得する必要がなくなるため、追加のストレージは発生しますが、このメカニズムによりセカンダリ インデックスを使ってデータを探すときの読み込みレイテンシを減らすことができます。例については、STORING 句をご覧ください。

インデックスの削除

セカンダリ インデックスを削除します。

構文

DROP INDEX index_name

説明

セカンダリ インデックスを削除するには、DROP INDEX ステートメントを使用します。

パラメータ

index_name

  • 削除するインデックスの名前。

データベース ID には次のルールが適用されます。

  • 先頭は小文字にしてください。
  • 小文字、数字、アンダースコア、ハイフンは使用できますが、大文字は使用できません。
  • 末尾をアンダースコアまたはハイフンにすることはできません。
  • ハイフンを含む文字列または予約語は、バッククォート(`)で囲む必要があります。
  • 2~30 文字にする必要があります。
  • 作成後に変更することはできません。