MySQL TIPS 4 ストアドプロシージャで指定した数のダミーデータを用意する
MySQLでブログを書いていてパフォーマンス系の記事を書こと思った時にダミーデータの用意をするのが面倒です。generate_series*1があれば簡単なのですがMySQLにはないのでストアドプロシージャで汎用的にダミーデータを生成できるものを作ってみました。以後はこちらを使ってダミーデータを生成するようにします。phpMyAdmin上からは『Error 1312 (0A000): PROCEDURE proc_name can't return a result set in the given context』となって使えないのでmysqlのコマンドライン上から実行してください。あと、生成したgenerate_seriesの値を複数使えなかったり、valuesをまとめて実行してないのでパフォーマンス的に遅かったりすると思いますが、それはまた時間があったら手直しします。腕に自信のある人は自分で直してみてください。
DROP PROCEDURE insert_generate_series; delimiter // CREATE PROCEDURE insert_generate_series( IN target VARCHAR(255) , -- insert対象のテーブル、カラム名を指定 IN value VARCHAR(255) , -- valuesを記述 ? がgenerate_seriesで生成された値になる IN start_num INT , -- 開始値 IN end_num INT , -- 終了値 IN step INT -- 増分 ) begin set @num:= start_num; while @num <= end_num do set @sql:=concat('INSERT INTO ',target,' VALUES ( ', value , ' )'); select @sql; prepare stmt from @sql; execute stmt using @num; set @num:=@num + step; end while; end; // delimiter ; call insert_generate_series('user(email)','concat(md5(?),"@example.com")',1,10000,1);
*1:以前、擬似的に再現する方法を紹介しましたが、前提として十分なレコードを持つテーブルが存在しないと使えません。