CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (index_col_name,...) index_col_name: col_name [(length)] [ASC | DESC]
バージョン 3.22 より前の MySQL
の場合、CREATE INDEX
ステートメントでは何も実行されません。バージョン
3.22 以降では、CREATE INDEX
は、インデックスを作成する ALTER
TABLE
ステートメントにマップされています。
通常、テーブルのインデックスはすべて、テーブル自体を
CREATE TABLE
で作成するときに一緒に作成します。 See
項6.5.3. 「CREATE TABLE
構文」。 CREATE
INDEX
では、既存のテーブルにインデックスを追加することができます。
(col1,col2,...)
形式のカラムリストでは、複合インデックスが作成されます。インデックス値は、リストに指定したカラムの値を連結して作成されます。
CHAR
型と VARCHAR
型については、カラムの一部のみを使用するインデックスを作成できます。この場合、col_name(length)
構文を使用して、各カラム値の最初から
length
に指定した数のバイトのインデックスを作成します(BLOB
型と TEXT
型では、プリフィックスの長さを必ず指定する必要があります。length
には 255
までの数値を指定できます)。次のステートメントでは、name
カラムの最初の 10
文字を使用したインデックスが作成されます。
mysql> CREATE INDEX part_of_name ON customer (name(10));
ほとんどの名前は最初の 10
文字が異なるため、このインデックスの場合、name
カラム全体から作成したインデックスよりはるかに遅くなるということはありません。
また、カラムの一部でインデックスを作成するとインデックスファイルのサイズを大幅に削減できるため、ディスク領域が節約されるとともに、INSERT
操作が迅速化される場合があります。
注意: NULL
値を持てるカラムに対するインデックスの追加は、MySQL
バージョン 3.23.2 以降で
MyISAM
、InnoDB
、BDB
のいずれかのテーブル型を使用している場合にのみ可能です。
BLOB
型や TEXT
型のカラムに対するインデックスの追加は、MySQL
バージョン 3.23.2 以降で MyISAM
または BDB
のいずれかのテーブル型を使用している場合か、MySQL
バージョン 4.0.14 以降で InnoDB
テーブル型を使用している場合にのみ可能です。
BLOB
型や TEXT
型カラムのインデックスでは、プリフィックスの長さを必ず指定する必要があります。
index_col_name
の指定では、最後に
ASC
または DESC
を付けることができます。
これらのキーワードは、昇順または降順によるインデックス値の格納を指定できるようにする今後の拡張に対応するものです。現時点では、これらのキーワードは解析されても無視され、インデックス値は常に昇順で格納されます。
MySQL でのインデックスの使用方法の詳細については、項5.4.3. 「MySQL でのインデックスの使用」 を参照してください。
FULLTEXT
インデックスでは、MyISAM
テーブルにおける CHAR
型、VARCHAR
型、TEXT
型のカラムに対してのみ、インデックスを作成することができます。FULLTEXT
インデックスは MySQL バージョン 3.23.23
以降で使用できます。
項6.8. 「MySQL 全文検索」。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.