SQLite というデータベースエンジンがある。 サーバプロセスが常駐するような大層なものではなく、1ファイル == 1データベース というシンプルな DB。dbi-japan のメーリングリストで話題になっていたのだが、やっと実験できた。
ちなみにトップページでは Four times faster than PostgreSQL.
とか、
速度比較のページでは
The speed of SQLite 2.4.0 is similar to MySQL.
とか言っていて速度には自信がある模様。
...
以前 MySQL vs PostgreSQL のベンチマークを取った スクリプトを転用して計測してみる。 英和辞典の、89万レコードを検索。
前回のとはベンチマークスクリプトをちょっといじってみた (like 検索のみではなく単純一致の検索も追加)。結果は以下のように。
Pg(connect 0.05747) 'create %' 0.01597 (select:fetch=0.01160:0.00437) 195 rows 'table a%' 0.00201 (select:fetch=0.00170:0.00031) 5 rows '%text%' 4.03208 (select:fetch=4.02349:0.00859) 573 rows '%integer%' 4.04652 (select:fetch=4.04606:0.00046) 16 rows 'computer' 0.00237 (select:fetch=0.00212:0.00025) 1 rows 'performance' 0.00166 (select:fetch=0.00142:0.00024) 1 rows Pg(connect 0.01653) (sorted) 'create %' 0.01534 (select:fetch=0.01225:0.00309) 195 rows 'table a%' 0.00210 (select:fetch=0.00179:0.00031) 5 rows '%text%' 4.04583 (select:fetch=4.03721:0.00862) 573 rows '%integer%' 4.06391 (select:fetch=4.06345:0.00046) 16 rows 'computer' 0.00242 (select:fetch=0.00217:0.00025) 1 rows 'performance' 0.00171 (select:fetch=0.00147:0.00024) 1 rows mysql(connect 0.01662) MyISAM 'create %' 0.00783 (select:fetch=0.00503:0.00280) 198 rows 'table a%' 0.00186 (select:fetch=0.00156:0.00030) 5 rows '%text%' 2.69851 (select:fetch=2.69053:0.00798) 612 rows '%integer%' 2.68792 (select:fetch=2.68748:0.00044) 16 rows 'computer' 0.00150 (select:fetch=0.00125:0.00025) 2 rows 'performance' 0.00132 (select:fetch=0.00109:0.00023) 1 rows mysql(connect 0.00146) MyISAM (sorted) 'create %' 0.01063 (select:fetch=0.00783:0.00280) 198 rows 'table a%' 0.00222 (select:fetch=0.00191:0.00031) 5 rows '%text%' 2.73597 (select:fetch=2.72789:0.00808) 612 rows '%integer%' 2.73082 (select:fetch=2.73039:0.00043) 16 rows 'computer' 0.00152 (select:fetch=0.00127:0.00025) 2 rows 'performance' 0.00134 (select:fetch=0.00110:0.00024) 1 rows SQLite(connect 0.00795) 'create %' 1.68071 (select:fetch=1.67791:0.00280) 198 rows 'table a%' 1.67695 (select:fetch=1.67664:0.00031) 5 rows '%text%' 1.95743 (select:fetch=1.94950:0.00793) 612 rows '%integer%' 1.93003 (select:fetch=1.92957:0.00046) 16 rows 'computer' 0.00107 (select:fetch=0.00085:0.00022) 1 rows 'performance' 0.00096 (select:fetch=0.00075:0.00021) 1 rows SQLite(connect 0.00164) (sorted) 'create %' 1.68540 (select:fetch=1.68266:0.00274) 198 rows 'table a%' 1.66519 (select:fetch=1.66489:0.00030) 5 rows '%text%' 1.95285 (select:fetch=1.94384:0.00901) 612 rows '%integer%' 1.93351 (select:fetch=1.93306:0.00045) 16 rows 'computer' 0.00110 (select:fetch=0.00087:0.00023) 1 rows 'performance' 0.00100 (select:fetch=0.00079:0.00021) 1 rows
見づらいですが。おおざっぱにまとめると、
- MySQL、SQLite は connect が速い
- SQLite は like 検索で (前方一致でも) インデックスが有効になっていないような
- ベタサーチでは、SQLite が最速
- 単純一致検索でも SQLite > MySQL > PostgreSQL
PostgreSQL の 4倍、てことはないにしても、確かに速い。基本的なSQLは一通り使えるし、とにかくシンプルで軽快。 バックアップもファイル一つ取っておけば大丈夫(多分)。 スタンドアロンで使うなら (複数台に分散するような規模でなければ)、かなりいい感じではないかと。