2つのテーブルをまたがるインデックスをカバーします

カイリー:

それは、テーブルにまたがるカバーするインデックスを作成することは可能ですか?私はこのクエリを最適化するとします:

SELECT tbl1.col1,
       tbl2.col2
  FROM tbl1 INNER JOIN
       tbl2 ON tbl1.col1 = tbl2.col1
 WHERE tbl1.col3 = ... 

これらのインデックスのヘルプを作成するのでしょうか?

INDEX (col3, col1) -- tbl1's
INDEX (col1, col2) -- tbl2's 
リック・ジェームス:

これは完全なクエリであると仮定すると、 ...

SELECT  a.col1, b.col2
    FROM  tbl1 AS a
    INNER JOIN  tbl2 AS b  ON a.col1 = b.col1
    WHERE  a.col3 = constant

分析:

そのためWhere句の、TBL1は、最初に検索されますと、これは、最適な指標になります。

INDEX(col3, col1) == handles the WHERE, plus it is "covering"

そして、ネステッド・ループが始まるインデックスが必要になりますTBL2に参加しますcol

INDEX(col1, col2) -- again "covering"

参照してくださいhttp://mysql.rjweb.org/doc.php/index_cookbook_mysql

タイトル(「...スパンの2つの表は、」)欺瞞です。これらのインデックスのどちらも1台以上を必要とします。INDEX(col2, col3)それは複数のテーブルを含むのでことはできません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=277426&siteId=1