6

複合インデックスを持つことは、次のようなものに有益でしょうか?

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)
4

2 に答える 2

3

インデックスのリーディングエッジのみが使用されるため(a.id)、INNER JOINtoのみbがインデックスの恩恵を受けます...したがって、インデックス(a.barおよびa.foo)の追加の列は、投稿されたサンプルクエリでは有益ではありません。

MySqlドキュメントから

列がインデックスの左端のプレフィックスを形成していない場合、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)

于 2012-10-31T18:30:36.323 に答える