web-dev-qa-db-ja.com

内部結合テーブルにインデックスを強制する方法は?

これに似たクエリにインデックスを強制するにはどうすればよいですか。 fooとbarに個別にインデックスを強制する必要があります。

SELECT foo.*, bar.*
FROM foo
INNER JOIN bar ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
  AND bar.status = 1
16
David

インデックスaがfooに存在し、インデックスbがbarに存在すると仮定します。

SELECT foo.*, bar.*
FROM foo FORCE INDEX (a)
INNER JOIN bar FORCE INDEX (b) ON foo.rel_id = bar.rel_id
WHERE foo.status = 1
  AND bar.status = 1

mySqlでインデックスの選択を強制します

28
Ηλίας

明らかなことは、結合とwhereの要件を満たすために、両方のテーブルのrel_idstatusにカバーインデックスを作成することです。

これまでに何を試しましたか?

編集

あなたは インデックスのヒント を提供しますが、答えるすべての人の核心はあなたはそれをする必要はないはずです。

MySQL 4.0.9以降では、USEINDEX(index_list)のように機能するFORCE INDEXを使用することもできますが、テーブルスキャンは非常にコストがかかると想定されています。つまり、テーブルスキャンは、指定されたインデックスの1つを使用してテーブル内の行を検索する方法がない場合にのみ使用されます。

0