CREATE INDEX 構文

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option ...]

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH}

index_option:
    KEY_BLOCK_SIZE value
  | index_type
  | WITH PARSER parser_name

CREATE INDEX は、インデックスを作成する為に ALTER TABLE ステートメントにマップされています。詳しくは 項 「ALTER TABLE 構文」 を参照してください。インデックスに関する更なる情報については、 項 「MySQLにおけるインデックスの使用」 を参照してください。

通常、テーブルが CREATE TABLE で作成される時にテーブル上に全てのインデックスを作成します。詳しくは 項 「CREATE TABLE 構文」 を参照してください。CREATE INDEX で既存テーブルにインデックスを追加する事ができます。

(col1,col2,...) のカラム リストは複合カラム インデックスを作成します。インデックス値は与えられたカラムの値を結合する事によって形作られます。

CHARVARCHARBINARY、そして VARBINARY カラムには、インデックス プリフィックス長を指定する為に col_name(length) 構文を利用して、カラム値の最初に部分だけを利用するインデックスを作成する事ができます。BLOBTEXT カラムもまたインデックスする事ができますが、プリフィックス長を与える 必要があります。。プリフィックス長は非バイナリ文字列タイプには文字で指定され、バイナリ文字列タイプにはバイトで指定されます。これは、インデックス エントリはCHARVARCHAR、そして TEXT カラムのそれぞれのカラム値の最初の length 文字で、そして BINARYVARBINARY、そして BLOB カラムのそれぞれのカラム値の最初の length バイトで成り立っているという事です。

ここに表示されているステートメントは、 name カラムの最初の10文字を利用してインデックスを作成します。

CREATE INDEX part_of_name ON customer (name(10));

もしカラム内の名前の最初の10文字が違っていれば、このインデックスは name カラム全体から作成されたインデックスよりも遅くは無いはずです。また、部分的なカラムをインデックスに利用する事でインデックス ファイルを小さくする事ができるので、ディスクのスペースを節約し、 INSERT 操作を早くする事ができます。

プリフィックスは最高で1000バイトの長さまで可能です。(InnoDB テーブルは767バイト)非バイナリ データ タイプ(CHARVARCHARTEXT)では CREATE INDEX ステートメントのプリフィックス長は文字数で解釈される一方、プリフィックス リミットはバイトで計算されるという事を覚えておいて下さい。マルチバイトの文字セットを利用するカラムのプリフィックス長を指定する時にはこれを考慮に入れておいて下さい。

UNIQUE インデックスは、インデックス内の全ての値は明確でなければいけないというような制限を作成します。既存行とマッチするキー値の新しい行を追加しようとするとエラーが発生します。全てのエンジンに対して、UNIQUE インデックスは NULL を含む事ができるカラムの複数 NULL 値を許容します。

FULLTEXT インデックスは MyISAM テーブルにだけサポートされており、CHARVARCHAR、そして TEXT カラムだけを含む事ができます。インデックスする作業は必ずカラム全体に対して行われますので、部分的インデックスはサポートされておらず、プリフィックス長を指定しても無視されます。操作に関しての詳細は 項11.7. 「全文検索関数」 を参照してください。

SPATIAL インデックスは MyISAM テーブルに対してだけサポートされており、 NOT NULL として定義された空間カラムだけを含む事ができます。章 16. Spatial Extensionsで空間データタイプについて説明されています。

MySQL 5.1 内では

index_col_name 仕様は ASCDESC で終わる事ができます。これらのキーワードは昇順や降順インデックス値ストレージを指定する為の将来の拡張子として許容されます。現在は、それらは解析されますが無視されます。インデックス値は毎回昇順で格納されます。

インデックス カラム リストに続き、インデックス オプションが与えられます。index_option 値は次のうちのどれかになり得ます。