MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  カラムインデックス

8.3.5 カラムインデックス

もっとも一般的なインデックスの種類には、単一カラムがあり、データ構造にそのカラムの値のコピーを格納し、対応するカラム値のある行を高速にルックアップできます。 B ツリーデータ構造により、インデックスは、WHERE 句内の =>BETWEENIN などの演算子に対応する特定の値、値のセット、または値の範囲をすばやく見つけることができます。

テーブルあたりの最大インデックス数とインデックスの最大長は、ストレージエンジンごとに定義されます。 第15章「InnoDB ストレージエンジンおよび第16章「代替ストレージエンジンを参照してください。 すべてのストレージエンジンは、1 テーブルあたり 16 個以上のインデックスと 256 バイト以上の合計インデックス長をサポートします。 ほとんどのストレージエンジンでは、制限が高く設定されています。

カラムインデックスの詳細は、セクション13.1.15「CREATE INDEX ステートメント」 を参照してください。

インデックス接頭辞

文字列カラムのインデックス指定に col_name(N) 構文を使用すると、カラムの最初の N 文字のみを使用するインデックスを作成できます。 このようにカラム値のプリフィクスのみのインデックスを作成すると、インデックスファイルをかなり小さくできます。 BLOB または TEXT カラムにインデックス設定する場合、インデックスのプリフィクス長を指定する必要があります。 例:

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

REDUNDANT または COMPACT の行形式を使用する InnoDB テーブルでは、接頭辞の長さは最大 767 バイトです。 DYNAMIC または COMPRESSED の行形式を使用する InnoDB テーブルでは、接頭辞の長さの制限は 3072 バイトです。 「MyISAM の場合」テーブルでは、接頭辞の長さの制限は 1000 バイトです。

注記

接頭辞の制限はバイト単位で測定されますが、CREATE TABLEALTER TABLE および CREATE INDEX ステートメントの接頭辞の長さは、非バイナリ文字列型 (CHAR, VARCHAR, TEXT) の場合は文字数、バイナリ文字列型 (BINARY, VARBINARY, BLOB) の場合はバイト数として解釈されます。 マルチバイト文字セットを使用する非バイナリ文字列カラムに接頭辞の長さを指定する場合は、これを考慮してください。

検索語がインデックス接頭辞の長さを超える場合、インデックスを使用して一致しない行が除外され、残りの行で一致の可能性が調査されます。

インデックス接頭辞の詳細は、セクション13.1.15「CREATE INDEX ステートメント」 を参照してください。

FULLTEXT インデックス

FULLTEXT インデックスは、全文検索に使用されます。 InnoDB および MyISAM ストレージエンジンのみが、CHARVARCHAR、および TEXT カラムに対してのみ、FULLTEXT インデックスをサポートしています。 インデックス設定は常にカラム全体に対して行われ、カラムプリフィクスインデックス設定はサポートされていません。 詳細は、セクション12.10「全文検索関数」を参照してください。

最適化は、単一の InnoDB テーブルに対する特定の種類の FULLTEXT クエリーに適用されます。 これらの特性を持つクエリーは特に効率的です。

  • ドキュメント ID またはドキュメント ID と検索ランクのみを返す FULLTEXT クエリー。

  • 一致する行をスコアの降順でソートし、LIMIT 句を適用して、上位 N 個の一致する行を取得する FULLTEXT クエリー。 この最適化を適用するには、WHERE 句がなく、降順の単一の ORDER BY 句のみがある必要があります。

  • 検索語に一致する行の COUNT(*) 値のみを取得し、追加の WHERE 句がない FULLTEXT クエリー。 WHERE 句を > 0 比較演算子を使用せずに、WHERE MATCH(text) AGAINST ('other_text') とコーディングします。

全文式を含むクエリーの場合、MySQL では、クエリー実行の最適化フェーズ中にこれらの式が評価されます。 オプティマイザは、全文式を参照して見積りを行うだけでなく、実行計画の開発プロセスでそれらを実際に評価します。

この動作の影響は、全文クエリーの EXPLAIN は通常、最適化フェーズ中に式の評価が行われない非全文クエリーより遅くなることです。

全文クエリーの EXPLAIN では、最適化中に一致が発生するため、Extra カラムに Select tables optimized away が表示される場合があります。この場合、後で実行する際にテーブルへのアクセスは必要ありません。

空間インデックス

空間データ型にインデックスを作成できます。 MyISAM および InnoDB は、空間型の R ツリーインデックスをサポートしています。 ほかのストレージエンジンは、空間型のインデックス設定に B ツリーを使用します (ARCHIVE を除きます。これは空間型のインデックス設定をサポートしていません)。

MEMORY ストレージエンジンでのインデックス

MEMORY ストレージエンジンはデフォルトで HASH インデックスを使用しますが、BTREE インデックスもサポートしています。


関連キーワード:  インデックス, テーブル, カラム, InnoDB, クエリー, ストレージ, エンジン, ステートメント, 結合, FULLTEXT