かなり大きく (3 つの巨大なテーブルを結合)、実行速度が遅すぎる SQL クエリがあります。私はそれを最適化しようとしていますが、奇妙な観察で実行されました:
SELECT board FROM ((foo JOIN bar ON id_bar=bar.id) JOIN baz ON id_baz=baz.id) ORDER BY foo.id DESC LIMIT 1;
+-------+
| board |
+-------+
| 3 |
+-------+
1 row in set (3,99 sec)
board
は int フィールドで、インデックスがあります。良い。しかし、インデックス付きvarchar(6)
フィールドを選択すると、遅い結果が得られます。
SELECT type FROM ((foo JOIN bar ON id_bar=bar.id) JOIN baz ON id_baz=baz.id) ORDER BY foo.id DESC LIMIT 1;
+--------+
| type |
+--------+
| normal |
+--------+
1 row in set (17,76 sec)
そんなことがあるものか ?クエリの遅い部分は、実際の結果の表示ではなく、JOIN
/ ORDER
/ GROUP
/の部分にあると思いました。WHERE
そのクエリを強化するにはどうすればよいですか?