トランザクションを使ってSQLiteの処理を超高速化
スポンサード リンク
諸事情で70万弱のデータをデータベース(SQLite3)に格納することがあったのですが、処理が長引きすぎてサーバ側で強制終了。
マニュアルを読んで見つけた「トランザクション」を使ってみると、処理速度が劇的に向上。そして、数秒のうちに格納完了。あまりの早さにビックリしたので、スクリプト実行時間を計測して比較してみました。
データベースの操作はPDOで行いました(PDOしか使ったことがない)。
PHP: PDO – Manual
比較した2つのスクリプト
サンプルスクリプト1(トランザクション不使用)
同じSQL文を100回実行するスクリプト。データベースへのパスは適当。
//開始
$start = microtime(true);
//データベースへの接続
$db = new PDO('sqlite:./test.db');
//レコードの追加
$sql = "insert into test (data) values ('123456789');";
for($a=0;$a<100;$a++){
$db->query($sql);
}
//終了
$end = microtime(true);
//実行時間の算出
$time = ($end - $start) * 1000;
echo $time.'ミリ秒';
サンプルスクリプト2(トランザクション使用)
サンプルスクリプト1に「トランザクションの開始」と「コミット」を追加しただけ。
//開始
$start = microtime(true);
//データベースへの接続
$db = new PDO('sqlite:./test.db');
//トランザクションの開始
$db->beginTransaction();
//レコードの追加
$sql = "insert into test (data) values ('123456789');";
for($a=0;$a<100;$a++){
$db->query($sql);
}
//コミット
$db->commit();
//終了
$end = microtime(true);
//実行時間の算出
$time = ($end - $start) * 1000;
echo $time.'ミリ秒';
比較した結果
それぞれ3回ずつ実行し、平均の実行時間で比較してみました。
| トランザクション不使用 | 727.94ミリ秒 |
| トランザクション使用 | 20.29ミリ秒 |
比較方法には問題があると思うけど、トランザクションを使った方が明らかに早い。不使用の35倍の早さですからね・・・圧倒的です。件数が多くなるほど、この差が開きそうだ。
スポンサード リンク
関連している記事をピックアップ。あわせてご覧ください。
- ポケモン151個・・・
- タイプライター風のGIFアニメーションを生成する「screedbot」
- ブログ等の画像の撮影機器を調べる方法
- 『UXTender』を使ってWindowsXPのテーマを変更する方法
- お茶を使ったラムネ『お茶らむね』
- 『BlastPNG』でのPNG最適化 各リサイズアルゴリズム比較
- HDD外周にデータを配置して高速化 最強デフラグソフト『UltimateDefrag』
- ウェブサイトの読み込み時間を比較することができる『Webslug』
- 価格.comに蓄積されたデータをニュース形式で配信する『Trend News(トレンドニュース)』
- Windowsのシャットダウンが遅いときには『User Profile Hive Cleanup Service』を使ってみよう

コメントはまだありません。