###前提・実現したいこと
1レコードのカラム数が200を超え、レコード数が30万件近くあるテーブルに対し、
別テーブルから引いてくるデータを使ってUPDATEをかける必要が出来てしまいました。
※もらった元データの雑さにかなりうんざりしています。
テーブルA カラム数が200以上、レコード数30万件
テーブルB カラム数3、レコード数1万件程度
いっぺんに更新をかけるとタイムアウトしてしまうので、
ある程度レコードを絞って何度か更新をかける方法を模索しています。
なにかよい方法をご存じの方、おられましたらご教示いただけますと幸いです。
###発生している問題・エラーメッセージ
Error Code: 2013. Lost connection to MySQL server during query
###該当のソースコード
SQL
1UPDATE A, B SET A.example = B.example WHERE A.dataId = B.dataId;
###試したこと
- PROCEDUREの中で1000件ずつ更新しようとしてみましたがうまく行きませんでした
- a.dataId BETWEEN 0 AND 10000 等でWHERE条件を増やしても結局タイムアウトしました
- MySQLはUPDATEにLIMITが使えると聞いてやってみましたが構文エラーとして実行できませんでした
SQL
1UPDATE A, B SET A.example = B.example WHERE A.example IS NULL AND A.dataId = B.dataId ORDER BY a.dataId LIMIT 1000;
###補足情報(言語/FW/ツール等のバージョンなど)
MySQL 5.5.43-MariaDB-37.2
###追記
SQL
1UPDATE A 2INNER JOIN B 3ON A.dataId = B.dataId 4SET A.example = B.example
このやり方で実行していますが、MySQL上のプロセスリストを見るとStateがSending dataでずっと止まっています。やはりいずれのやり方も、そもそもテーブルの連結方法が問題になるようです…
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/08 09:27