トランザクションを使ってSQLiteの処理を超高速化

モリタ電器

トランザクションを使ってSQLiteの処理を超高速化

  • 2008/05/04 (日)
  • PHP
  • はてなブックマーク数

諸事情で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倍の早さですからね・・・圧倒的です。件数が多くなるほど、この差が開きそうだ。

おもしろいブログがたくさんあります→BlogRanking

関連記事

  • はてなブックマークに追加 Livedoorクリップに追加 FC2ブックマークに追加 del.icio.usに追加 niftyクリップに追加 POOKMARK Airlinesにブックマーク Buzzurlにブックマーク

Comments (0)

トランザクションを使ってSQLiteの処理を超高速化 へのコメント

Comment form
Remember personal info
情報の保存機能は停止中

※コメント投稿後に修正できる機能を追加したいのですが、方法が分からず。コメント投稿の際はよーく確認してくださいませ。

Trackback (0)

トランザクションを使ってSQLiteの処理を超高速化 へのトラックバック

Trackback URL
http://afstyle.net/mt4/mt-tb.cgi/237

※言及リンクの有無は問いませんが、管理人の判断により削除される場合があります。

※スパムフィルタなどにより、すぐに表示されない場合があります。

SPONSORED LINKS
RECENT ENTRIES
RECENT COMMENTS
RECENT TRACKBACK