質問: ir8.count ORDER BY ir1.count DESC LIMIT 10 ``` 上記クエリでjoinできるのはわかるんですが、explainをかけると いずれかのテーブルで、using temporaryとusing filesortが出現してしまいます。 各テーブルのcountにはprimaryがついています。 using temporary, using filesortを出さずにjoinする方法はないでしょうか。 速度が非常に遅く、困っております。 宜しくお願いいたします。 --- 170128更新 テーブル構造は以下の形です。 (input_irou1の例ですが、2~8もほぼ同様です) ![テーブル定義](https://teratail.storage.googleapis.com/uploads/contributed_images/0d5d3cc87fc1048904622679f6971939.png) ※1全テーブルでインデックス定義はありません ※2鍵マークはprimaryの定義のいみです。
回答: すべてが`INNER JOIN`である以上、`JOIN`してみなければどこまでが`LIMIT 10`の範囲かわからないため、全件で`JOIN`を始めてしまいます。 以下の3条件のどれかを満たす場合、先に`input_irou1`から10個引いた上で、そこに残りのテーブルを`JOIN`させる、という手段が考えられます。 * あとの処理上、`input_irou1`に対する`LEFT JOIN`で問題ない * どのレコードについてもテーブル8つは必ず揃っている * 8つのテーブルのどれかが欠けることが稀で、かつ1つぐらい減っても問題はない