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]