MySQL
のすべてのカラム型にはインデックスを張ることができます。SELECT
操作のパフォーマンスの改善には、対応するカラムにインデックスを使用することが最善の方法です。
テーブルあたりの最大インデックス数とインデックスの最大長は、ストレージエンジンごとに定義されます。詳しくはStorage Enginesを参照してください。ストレージエンジンのすべてで、1 テーブルあたり 16 以上のインデックスと 256 バイト以上のインデックス長がサポートされます。大抵のストレージエンジンでは、インデックス最大長がより高く設定されています。
インデックス指定で
構文を用いて、文字列カラムの最初の
col_name
(N
)N
キャラクタのみを使用したインデックスを作成できます。このようにカラム値の接頭辞のみをインデックス化すると、インデックスファイルをかなり小さくすることができます。BLOB
または TEXT
カラムにインデックスを張る場合、インデックスに対して接頭辞長を指定しなければなりません。例
:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
接頭辞は、最大 1000 バイト長
(InnoDB
テーブルに対しては 767 バイト)
まで可能です。接頭辞の最大長はバイトで評価されます。一方、CREATE
TABLE
ステートメント内の接頭辞長は文字数として解釈されます。マルチバイトキャラクタセットを使用するカラムに対して接頭辞長を指定するとき、このことを考慮に入れなければいけません。
FULLTEXT
インデックスの作成も可能です。これらはフルテキスト検索に使用されます。FULLTEXT
インデックスをサポートするのは
MyISAM
ストレージエンジンだけで、CHAR
、VARCHAR
、そして
TEXT
カラムについてのみサポートされます。インデックス設定は常にカラム全体を対象として、カラム接頭辞のインデックス設定は行われません。詳細については、項7.8. 「全文検索関数」をご参照ください。
空間データ型上でインデックスの作成もできます。現在、MyISAM
のみが空間型 R-tree
インデックスをサポートしています。ほかのストレージエンジンは空間型のインデックス化に
B-trees を使用します。(ただし
ARCHIVE
や
NDBCLUSTER
といった空間型インデックスをサポートしないものを除きます)
MEMORY
ストレージエンジンはデフォルトで
HASH
インデックスを使用しますが、BTREE
インデックスもサポートしています。