2012年3月29日

[mysql 15703] Left Join句を付けたUPDATE処理時間が非常に長くかかって

お世話になります。

Left Join句を付けたUPDATE処理時間が非常に長くかかって、処理に失敗しますので、解決策を教えてください。

実行したSQL

UPDATE `table-a` LEFT JOIN `table-b` ON ( `table-a`.`Ka` = `table-b`.`Kb` )
SET `table-a`.`fa` = `table-b`.`fb`;


経過時間 3600秒を過ぎても終了しません。

ちなみに、作業環境は以下の通りです。

1.作業環境
1)サーバーマシンの環境
  MySQLサーバ:バージョン5.5.11
  (mysql-5.5.11-win32.msi)
  Workbench:バージョン5.2.33CE Revision 7508
  (mysql-workbench-gpl-5.2.33b-win32.msi)
  OS:Windows 7 Professional SP1(32bit)
  PC:DELL Vostro(Intel Core 2 Duo,CPU E7500 2.93GHz) RAM 2.00GB
2)クライアントマシンの環境
  サーバマシン上で実行
  実行時には他の処理は動かしていません。
3)データ(innodb)
  table-a
    レコード数:約25万件
    レコードサイズ:約300バイト
    `table-a`.`Ka`:VARCHAR(30) KEY設定済み
  table-b
    レコード数:約20万件
    レコードサイズ:約300バイト
    `table-b`.`Kb`:VARCHAR(30) ユニークKEY設定済み

2.関係しそうなことと思っていること

以下のような点はLeft Join句の効率化に影響しますでしょうか?

1)AdvancedタブのVarious/big-tablesをチェックする

2)AdvancedタブのVarious/join_buffer_size(現在131,072)を大きくする

3)AdvancedタブのVarious/read_buffer_size(現在49K)をチェックする

4)InnoDBタブのinnodb_additional_mem_pool_size(現在7M)を大きくする

5)InnoDBタブのinnodb_buffer_pool_size(現在300M)を大きくする

6)DBMS connection read time out (in seconds)の設定時間をもっと大きくし、処理が終わるのを待つ。

以上はWorkbenchのOption file画面での話です。

7)ジョインの結果を小さくするために、left joinテーブルとして処理に必須のフィールドのみを抽出したテーブルを作成し、そのテーブルを使用する。

思いつくのは以上のようなことです。
なお、1)〜5)はどのような場合に設定するのか、よくわかりません。

よろしくご指導願います。

投稿者 xml-rpc : 2012年3月29日 15:08
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/109180
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。