2016-04-11 7 views
0

私はMySQLとInnoDBを使用しています。ここでWHERE句とORDER BY句を持つINNER JOINに最適なインデックスは何ですか?

SELECT id FROM 
Foo 
INNER JOIN 
Bar 
ON Foo.id = Bar.fooId 
WHERE Foo.column1 = N 
ORDER BY Foo.column2 DESC LIMIT 100 

Foo.idが主キーであるとBar.fooIdがFKである:私は次のクエリをしたと仮定し 。

FooBarテーブルに追加すべき最良のインデックスは何ですか?

現在、(Foo.column1, Foo.column2)のインデックスはFooテーブルにあります。このコンポジットインデックスにもFoo.idを追加する必要がありますか?注文は何ですか?

このテーマをカバーする正式な参照が見つかりませんでした。

+0

Foo.idは主キー、Bar.fooIdは外部キーです。右? –

+0

@DipanwitaKunduはい。編集されました。 – Mowji

+0

複合インデックスとしてfoo.idを追加する必要はありません。これで十分です。 –

答えて

0

(Foo.column1, Foo.column2)は、Fooで十分であるはずです。innodbは常にすべてのインデックスの終わりにPKを持つため、PKを最後に追加する必要はありません。 Barには、fooIdのインデックスが必要です。

explain <query>を実行して、MySQLの動作を確認してください。

Fooの場合は、と100個の行なしに、ref,using indexを追加してください。

Barは、refusing indexが余分にあります。

関連する問題