MySQLでレコードを大量にinsertしたい時ってありますよね。
処理時間がどのくらいになりそうかと検証したい時とか。
バッチ処理で1日何百万件処理する必要があって、そのスケジューリング作成のためローカルで1万件くらいで処理してみたいとか、インデックス追加したけど実際にクエリがどのくらい速くなったかとか。(この場合はカーディナリティにもよるけど)
まぁケースは色々あるけど、そんな時ローカルにデータが数件しかなかったらどうやって増やしますか?
え、エクセルやスプレッドシートで頑張ってコピペや置換で作っていきます?
昔の私ですね。
もうこれからの私はストアドプロシージャでシュシュっとinsertしていきます。
というわけで自分メモのため書いてきます。
とりあえずサンプル
サンプルはこんな感じです。INSERTとなってるとこはそれぞれのテーブルのに変えてください。
DROP PROCEDURE IF EXISTS insert_many_records;
DELIMITER //
CREATE PROCEDURE insert_many_records()
BEGIN
DECLARE @number integer;
SET @number = 0;
WHILE @number < 10000 DO
INSERT INTO `users` (`name`) VALUES ('test');
SET @number = @number + 1;
END WHILE;
END;
//
DELIMITER ;
CALL insert_many_records;
注意点
ちなみにこれ、Sequel ProなどのGUIのクライアントツールだと動かす方法見当たらなかったです。
なのでコマンドラインから実行するようにしてください。
Sequel Proでも実行する方法あればどなたか教えて下さい。