複合インデックスを持つことは、次のようなものに有益でしょうか?
SELECT * FROM a INNER JOIN b ON(a.id=b.id)
INNER JOIN c ON(a.bar=c.id)
INNER JOIN d ON(a.foo=d.id)
インデックスは次のようになります。
(a.id, a.bar, a.foo)
複合インデックスを持つことは、次のようなものに有益でしょうか?
SELECT * FROM a INNER JOIN b ON(a.id=b.id)
INNER JOIN c ON(a.bar=c.id)
INNER JOIN d ON(a.foo=d.id)
インデックスは次のようになります。
(a.id, a.bar, a.foo)
インデックスのリーディングエッジのみが使用されるため(a.id
)、INNER JOIN
toのみb
がインデックスの恩恵を受けます...したがって、インデックス(a.bar
およびa.foo
)の追加の列は、投稿されたサンプルクエリでは有益ではありません。
列がインデックスの左端のプレフィックスを形成していない場合、MySQLはインデックスを使用してルックアップを実行できません。ここに示されている
SELECT
ステートメントがあるとします。SELECT * FROM tbl_name WHERE col1=val1; SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2; SELECT * FROM tbl_name WHERE col2=val2; SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;
にインデックスが存在する場合
(col1, col2, col3)
、最初の2つのクエリのみがインデックスを使用します。3番目と4番目のクエリにはインデックス付きの列が含まれますが、の左端のプレフィックスではありませ(col2)
ん。(col2, col3)
(col1, col2, col3)