2013年3月8日金曜日

MySQLでinsert, updateを大量に実行したいとき

PHP+MySQLで同じテーブルに大量のinsertやupdateを行う場合に、
1回ずつ実行すると遅いのでまとめてinsertすると早くなります。

INSERT INTO table (id, name) VALUES (1, 'name1');
INSERT INTO table (id, name) VALUES (2, 'name2');
....

のような場合、

INSERT INTO table (id, name) VALUES (1, 'name1'), (2, 'name2'), ...;
のようにvaluesを複数にしてまとめて実行するようにします。


 updateの場合にはON DUPLICATE KEY UPDATEをつけたinsertを実行すれば同様の効果が得られます。

UPDATE table set name = 'name1' where id = 1;
UPDATE table set name = 'name2' where id = 2;

を以下のようにします。

INSERT INTO table (id, name) VALUES (1,'name1'), (2, 'name2')
ON DUPLICATE KEY UPDATE name = VALUES(`name`)';

UPDATE文をたくさんつなげた長いSQLを作って実行すると、
接続回数が減るためか一応早くなりますが大きな効果は得られません。


初投稿なので練習も兼ねて適当な感じで終わりです。  

0 件のコメント:

コメントを投稿