2013年4月15日

レコード数が多くなったテーブルを結合するとフリーズするほど処理が重くなってしまった時の対処法

レコード数が多くなると、DBの処理も慎重に行わなければいけません。多くのレコードに対して負荷の思いクエリを投げると落ちてしまう事にも繋がってしまいます。今回はMySQL起動時に下記のようなエラーが発生した時の対処法です。

phpMyAdmin – エラー
#1040 – Too many connections

内容としては「『同時接続可能な数を超えているよ」というもの。順番に現象を確認してみると、このエラーが発生していたのは「複数のテーブルを結合し、複雑なwhere句が書かれたクエリを投げていたページ」でした。

150万件と7万件程度のレコード数を持つ2つのテーブルを扱うのは大変なのか、と思いきや、下記一文を添えてあげるだけでこの問題は解決しました。

STRAIGHT_JOIN

例)通常

select * from table

例)STRAIGHT_JOINを添える

select STRAIGHT_JOIN * from table

このSTRAIGHT_JOINはテーブルの結合順を決定するもので、特に指定しない場合はオプティマイザが結合順を決定します。複数のテーブルを結合する処理が思ったように実行されない場合、STRAIGHT_JOINを試してみると良いかと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です