最近私はmySQLインデックス作成を読んでいて、マルチインデックスの理解が正しいかどうかを確認したいと考えています。私は主にInnoDBを使用しています。複数列対複数列のインデックス作成のコンセプト
私は、一例として、次のクエリを使用します:
CREATE INDEX idx_multi ON tbl(col1,col2,col3)
:インデックスがあると仮定すると、
SELECT * FROM tbl_test WHERE col1=X AND col2=Y
マルチカラムインデックス
をインデックス全体が何らかの形で連結されています(最もシンプルなwo uldは、その間に区切り文字を追加します。カンマ)を作成し、Bツリーに直接格納します。 Bツリーの構造は左から右にインデックスチェックを強制します(インデックスは現在ストリングとして保存されていますか?< - 誰かがこれを調べることができますか?)したがって、idx_multi
。
複数の単一列インデックス
CREATE INDEX idx_col1 ON tbl(col1)
CREATE INDEX idx_col2 ON tbl(col2)
CREATE INDEX idx_col3 ON tbl(col3)
パーサーは、idx_col1
とidx_col2
両方のBツリーを検索した行の2つのそれぞれのセットを返しますINTERSECT
を実行して結果を取得します(mySQL Inde xマージ最適化)。この場合、エンジンは追加のクエリを実行する前に2つのBツリー検索を実行します。
私は別の質問があります: インデックス用のBツリー実装では、VARCHARインデックスよりも効率的に検索するINTインデックスmakeがありますか?
誰かが私の理解の欠陥を指摘することができれば幸いです。