:: DEVELOPER ZONE
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 全文検索」。
© 1995-2005 MySQL AB. All rights reserved.
