0

A と B の 2 つのテーブルがあり、A は Ai と A.ii でインデックスが作成され、B は Bi でインデックスが作成され、次のクエリを実行するとします。

SELECT * 
FROM A JOIN B
     on A.i = B.i

これが B のインデックスを使用することは理解していますが、次のクエリを使用すると、パフォーマンスが向上しますか (つまり、A のインデックスを使用します)?

SELECT * 
FROM A JOIN B
     on A.i = B.i AND A.ii = B.ii 

私の本能はノーと言い、このMySQL ドキュメントは、Ai と A.ii で WHERE 句を使用して利点を確認する必要があることを示唆していますが、経験に基づいた推測以上のものを求めています。

4

2 に答える 2

0

A.ii にも参加することで何らかの利益があったとしても、索引付けされていない B.ii を含めることで失われます。だからいいえ、何の利益もありません。

于 2013-08-19T14:29:22.823 に答える
0

MySQL はインデックス マージの最適化をサポートしているため、B の 2 つのインデックスを使用して、それらの共通点を見つけることができます。type: index_mergeEXPLAIN の出力でこれに気付くでしょう。また、交差を使用していることを示すkeys: i,iiメモもフィールドに表示されます。Extra

しかし、等値比較をAND用語として組み合わせている場合は、列のペアに複合インデックスを定義する方がはるかに優れています。http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/
を参照してください。

MySQL 5.6 はインデックス条件プッシュダウンも提供します。これは、Bi にインデックスしかなく、B.ii にインデックスがまったくない場合でも役立つ場合があります。

于 2013-08-19T14:33:02.127 に答える