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インデックスもサポートしています。
