2016-06-23 6 views
-1

最近私は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_col1idx_col2両方のBツリーを検索した行の2つのそれぞれのセットを返しますINTERSECTを実行して結果を取得します(mySQL Inde xマージ最適化)。この場合、エンジンは追加のクエリを実行する前に2つのBツリー検索を実行します。

私は別の質問があります: インデックス用のBツリー実装では、VARCHARインデックスよりも効率的に検索するINTインデックスmakeがありますか?

誰かが私の理解の欠陥を指摘することができれば幸いです。

答えて

0

ショート答え:

  • 「インデックスのマージが交差は」良い複合インデックスよりも効率が低いです。
  • VARCHARは、INTよりわずかに効率が低くなります。ご心配なく。
  • PRIMARY KEY(string)からPRIMARY KEY(id), UNIQUE(string)に変更すると、通常はパフォーマンスが低下します。
  • idx_multiコンセプトが正しいです。

長い回答はこの形式では長すぎますが、discussion of composite indexesと私のindex cookbookに入力しました。

関連する問題