[前][次][番号順一覧][スレッド一覧]

mysql:13951

From: HIRATSUKA Sadao <HIRATSUKA Sadao <hiratsuka.sadao@xxxxxxxxxx>>
Date: Wed, 09 May 2007 14:02:43 +0900
Subject: [mysql 13951] Re: ストアドプロシージャを使うと遅くなる??

平塚といいます。

> ■ INSERT文そのままの実行例
> 
>     for (nCnt = 1; nCnt <= 100000; nCnt ++) {
>         sprintf(cSQL, "INSERT INTO proc_tb VALUES (%d,'%s%d','%s');", 
>             nCnt, "testdata", nCnt, "2007/05/08 10:10:18");
>         mysql_query(mysql, cSQL);
>     }

> Q3. 他に何か高速に登録する手段は考えられるでしょうか?

MySQLのINSERT文は、一回で複数行入れる構文があります。
書き方しょぼいですが例えば↓こんな感じで、

 for (nCnt = 1; nCnt <= 100000; nCnt += 10) {
  sprintf(cSQL, "INSERT INTO proc_tb VALUES (%d, '%s%d', '%s'), (%d, '%s%d',
'%s'), (%d, '%s%d', '%s'), (%d, '%s%d', '%s'), (%d, '%s%d', '%s'), (%d,
'%s%d', '%s'), (%d, '%s%d', '%s'), (%d, '%s%d', '%s'), (%d, '%s%d', '%s'),
(%d, '%s%d', '%s')",
   nCnt, "testdata", nCnt, "2007/05/08 10:10:18",
   nCnt+1, "testdata", nCnt+1, "2007/05/08 10:10:18",
   nCnt+2, "testdata", nCnt+2, "2007/05/08 10:10:18",
   nCnt+3, "testdata", nCnt+3, "2007/05/08 10:10:18",
   nCnt+4, "testdata", nCnt+4, "2007/05/08 10:10:18",
   nCnt+5, "testdata", nCnt+5, "2007/05/08 10:10:18",
   nCnt+6, "testdata", nCnt+6, "2007/05/08 10:10:18",
   nCnt+7, "testdata", nCnt+7, "2007/05/08 10:10:18",
   nCnt+8, "testdata", nCnt+8, "2007/05/08 10:10:18",
   nCnt+9, "testdata", nCnt+9, "2007/05/08 10:10:18");
  mysql_query(&dbase, cSQL);
 }

・元の状態
$ time ./a.out

real    0m30.890s
user    0m2.370s
sys     0m2.050s

・10行ずつINSERT
$ time ./a.out

real    0m6.584s
user    0m0.390s
sys     0m0.250s

こちらの環境では
5倍速くなりました。

ストアドでもプリペアドステートメントでも効果あると思います。
ご参考まで、よろしくお願いいたします。

-- 
平塚貞夫 hiratsuka.sadao@xxxxxxxxxx


[前][次][番号順一覧][スレッド一覧]

     13950 2007-05-09 11:45 [<kinosita@xxxxxxxxxx] ストアドプロシージャを使うと遅くなる??
->   13951 2007-05-09 14:02 ┗[HIRATSUKA Sadao <hir]                                       
     13952 2007-05-09 16:40  ┗[<kinosita@xxxxxxxxxx]