ダミーデータを作成する。 insert_generate_series

以前のinsert_generate_seriesですと数万行のダミーデータ作成はできないので、以下のように改良しました。

DROP   PROCEDURE insert_generate_series;
delimiter [[
CREATE PROCEDURE insert_generate_series(
   IN target    VARCHAR(255) , -- insert対象のテーブル、カラム名を指定
   IN value     VARCHAR(6000) , -- valuesを記述 @numがgenerate_seriesで生成された値になる
   IN start_num INT ,          -- 開始値
   IN end_num   INT ,          -- 終了値
   IN step      INT            -- 増分
)
begin
  set @num:= start_num;
  set @sql:= concat('INSERT INTO ',target,' VALUES ');
  set @page_size:=100;
  set @page_end:=0;

  while @num <= end_num do
    set session sql_notes=0;
    drop temporary table if exists t_values;
    set session sql_notes=1;
    create temporary table t_values (val varchar(6000));
    set @buf_size:=length(@sql);
    set @page_end:=@page_end+@page_size;
    while @num <= end_num AND @num <= @page_end do
      set @buf:=concat('(',replace(value,'@num',@num),')');
      insert into t_values VALUES ( @buf );
      set @buf_size:=@buf_size+length(@buf)+1;
      set @num:=@num + step;
    end while;
    set session group_concat_max_len=@buf_size;
    -- set session max_allowed_packet=@buf_size;
    set @sql:= concat(@sql,(select group_concat(val) from t_values));
    prepare stmt from @sql;
    execute stmt;
  end while; 
end;
]]
delimiter ;

call insert_generate_series('user(user_name)','concat(md5(@num),@num)',1,100000,1);