【特集】
生まれ変わるPHP - Zend Engine 2、SQLiteの実力は?
8 MySQLとSQLiteの比較 - 大量のデータの書込みでは?
2004/03/29
さて、データベースが作成できたのでPHPからMySQL、SQLiteそれぞれのデータベースを操作してみよう。まず、大量データの挿入を行った場合、どちらが速いだろう。以下のようなスクリプトを書いて検証してみる。
MySQL用
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$sec + (float)$usec);
}
$lines = 1000;
$con = mysql_connect("localhost", "root", "");
mysql_select_db("phptest");
$start = getmicrotime();
for ($i=0; $i<$lines; $i++) {
$sql = sprintf("insert into t1 values(%d);", $i);
mysql_query($sql, $con);
}
$elapsed = getmicrotime() - $start;
printf("%d件の挿入に%f秒かかりました。",$lines, $elapsed);
mysql_close($con);
?>
SQLite用
<?php
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$sec + (float)$usec);
}
$lines = 1000;
$con = sqlite_open("/tmp/phptest");
$start = getmicrotime();
for ($i=0; $i<$lines; $i++) {
$sql = sprintf("insert into t1 values(%d);", $i);
sqlite_query($sql, $con);
}
$elapsed = getmicrotime() - $start;
printf("%d件の挿入に%f秒かかりました。",$lines, $elapsed);
sqlite_close($con);
?>
このスクリプトは、両者とも全く同じく1000件のデータを連続して挿入する。実行結果は、予想外に圧倒的な大差がついた。
SQLite
MySQL
さすがはMySQLといったところだが、SQLiteの16秒はちょっとかかりすぎだろう。どうやら大量データの連続挿入はSQLiteの不得意な処理のようだ。
お詫びと訂正
SQLiteでは明示的にトランザクションを開始しない限り、INSERT処理の前後に必ず"BEGIN"、"COMMIT"が実行される。後日追試を行ったところ、MySQLに対して大幅に処理時間がかかったのはこのためであることがわかった。試しに、次のように繰り返し処理を1つのトランザクション内に置いてみたところ、1000件の挿入もMySQLを上回る0.221312秒で完了した。
sqlite_query($con, "begin;");
$start = getmicrotime();
for ($i=$j+1; $i<$lines; $i++) {
$sql = sprintf("insert into t1 values(%d);", $i);
sqlite_query($con, $sql);
}
$elapsed = getmicrotime() - $start;
sqlite_query($con, "commit;");
以上、情報をお寄せ頂いた皆様にお礼申し上げると共に、お詫びして訂正させて頂きたい。
ヘッドライン
- トレンドマイクロ、USBメモリ型ウイルス検索製品「Portable Security」発表[10:42 2/10]セキュリティ
- 【コラム】FileMaker×PHPで作る、簡単・便利なWebアプリ 第49回 結果セットの取扱いに特化したクラス、FileMaker_ResultSet(2)[10:18 2/10]プログラミング
- CSS/HTMLリファレンスマニュアル、最新ブラウザ互換情報[09:00 2/10]JavaScript / CSS / HTML
- 【レビュー】BOOK REVIEW - 現場に振り回されるだけのSE人生がイヤならチカラをつけよう[09:00 2/10]SE力
- 【レポート】暗号2010年問題に向け「いつまでに何をすべきか」 - ベリサインが説明[08:00 2/10]セキュリティ
- ルネサス、RXファミリ第3弾としてモータ制御向け「RX62T」を製品化[07:00 2/10]エレクトロニクス
- Rambus、次世代携帯機器向けメモリ「モバイルXDR」を発表[21:16 2/9]エレクトロニクス
- Intel、基幹業務システム向け次世代プロセッサ「Itanium 9300」を発表[20:47 2/9]エレクトロニクス
- MicronとNanya、42nmプロセスを採用した2GビットDDR3を開発[20:07 2/9]エレクトロニクス
- ISSCC 2010 - 日立、1Gbpsあたり消費電力1mW以下のトランシーバ回路を開発[19:52 2/9]エレクトロニクス







