MySQL
の全てのカラム型にはインデックスを張ることができます。SELECT
操作のパフォーマンスの改善には、対応するカラムにインデックスを使用することが最善の方法です。
テーブルあたりの最大インデックス数とインデックスの最大長は、ストレージエンジンごとに定義されます。章 13. ストレージエンジンとテーブルタイプを参照してください。ストレージエンジンのすべてで、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
カラムについてのみサポートされます。インデックスの作成は常にカラム全体を対象として、先頭部分(プリフィックス)のインデックス化は行われません。詳細については、項11.7. 「全文検索関数」をご参照ください。
空間データ型上でインデックスの作成もできます。現在、MyISAM
のみが空間型R-treeインデックスをサポートしています。他のストレージエンジンは空間型のインデックス化にB-treesを使用します。
(ただしARCHIVE
やNDBCLUSTER
といった空間型インデックスをサポートしないものを除きます)
MEMORY
ストレージエンジンはデフォルトでHASH
インデックスを使用しますが、BTREE
インデックスもサポートしています。