タグ: #MySQL
MySQLで単純なテーブル結合を多く行うクエリの反応が異様に重い時の対処方法
EXPLAIN結果を見る限りインデックスを正しく使っている筈なのに、
SELECT id, name 〜〜 INNER JOIN 〜〜 INNER JOIN 〜〜 というようなSQLで
結果が返ってこなくなった時の対処方法です。
どの状態で止まっているか、まずはプロセスリストを見て下さい。
該当クエリが「statistics」で止まっていませんか?
そんな時、 サーバはクエリ実行計画を開発する統計を計算しています。
いわゆるクエリオプティマイザというものですね。それが悪さをしています。
その対処方法としては簡単。「STRAIGHT_JOIN」をSELECTの後ろに追加するだけ。
先程の物であれば、SELECT STRAIGHT_JOIN id, name〜〜 で始めるようにすれば高速化されます。
何が変わるかと言いますと、MySQLの中でSQLを最適化しようと処理が行われる(オプティマイザが実行される)のですが、それを無効にしてSQLのあるがままに処理を実行するようになります。
解決の手助けになれば幸いです。
2年前 | 2010年 3月 2日
| 固定リンク
