LOAD DATA にパイプからデータを流し込みます。
まずはデータを入れるテーブルを作ります。
create table t (
id int not null primary key,
str text not null
);
LOAD DATA には計算式をかますことができるので RAND() のような関数も使うことができます。
LOAD DATA にはファイル名しか指定できませんが /dev/stdin とでもすれば標準入力から流しこむことができます。
seq 10000000 |
mysql test -e "
load data local infile '/dev/stdin' into table t (id)
set str = floor(rand()*10000000)
"
LOAD DATA LOCAL INFILE ではなく LOAD DATA INFILE を使いたければ mkfifo を使うと良いです。
mysqld から読めるように -m 0644 も指定しておきましょう。
mkfifo -m 0644 /tmp/xxxx
seq 10000000 > /tmp/xxxx &
mysql test -e "
load data infile '/tmp/xxxx' into table t (id)
set str = floor(rand()*10000000)
"
rm /tmp/xxxx
環境や流し込むデータの内容によってかかる時間は全然違うと思いますが、1000 万件が 1 分強ぐらいでした。
LOAD DATA LOCAL INFILE よりも LOAD DATA INFILE の方が速いかなと思ったけど接続が Unix ドメインソケットなら特に違いは無かった。