これに似たクエリにインデックスを強制するにはどうすればよいですか。 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
インデックス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でインデックスの選択を強制します
明らかなことは、結合とwhereの要件を満たすために、両方のテーブルのrel_id
とstatus
にカバーインデックスを作成することです。
これまでに何を試しましたか?
あなたは インデックスのヒント を提供しますが、答えるすべての人の核心はあなたはそれをする必要はないはずです。
MySQL 4.0.9以降では、USEINDEX(index_list)のように機能するFORCE INDEXを使用することもできますが、テーブルスキャンは非常にコストがかかると想定されています。つまり、テーブルスキャンは、指定されたインデックスの1つを使用してテーブル内の行を検索する方法がない場合にのみ使用されます。