SQLite SQLiteを触ってみよう 【第4回 速度測定編】

この記事は2014年12月2日に書かれたものです。内容が古い可能性がありますのでご注意ください。


今回はSQLiteの速度が速いと言われているので、MariaDBと比較をしてみました。
他のサイトでは、相当速度差が出ているようです。
SQLiteが早かったり、MySQLの方が早かったりなので、本当はどっちなのでしょう・・・
実際にやってみると驚きの結果になりました。

SQLiteとMariaDBを比較してみた

【SQLiteへの登録処理】

$link = null;
try{
  $link = new SQLite3("../db/test_db.sqlite");
  $insSql = "INSERT INTO employee_tbl (id, name, gender, salary, notes) VALUES(";
  for($i = 1; 10000 >= $i; $i++){
    $res = $link->exec($insSql
      . $i . ","
      . "'TEST NAME_" . $i . "',"
      . rand(0, 1) . ","
      . rand(1000000, 10000000) . ","
      . "''"
      . ")");

    if(!$res){
      echo "登録に失敗しました。n";
      $link->close();
      exit();
    }
  }
  $link->close();
} catch(Exception $ex) {
  echo "DBへの接続エラーが発生しました。" . PHP_EOL ;
  echo $ex->getTraceAsString();
}

【MariaDBへの登録処理】

$dbInfo = parse_ini_file('./config.ini');
$link = null;
try{
  $link = mysqli_connect($dbInfo['URL'], $dbInfo['USER'], $dbInfo['PSWD'])
    or dir('MariaDBへの接続に失敗しました。');
  $db = mysqli_select_db($link, $dbInfo['DB'])
    or die('DBの選択に失敗しました');
  $insSql = "INSERT INTO employee_tbl (id, name, gender, salary, notes) VALUES(";
  for ($i = 1; $i <= 10000; $i++) {
    $res = mysqli_query($link, $insSql
      . $i . ","
      . "'TEST NAME_" . $i . "',"
      . rand(0, 1) . ","
      . rand(1000000, 10000000) . ","
      . "''"
      . ")");
  }
  mysqli_close($link);
} catch(Exception $ex) {
  echo 'DBへの接続エラーが発生しました。' . PHP_EOL ;
  echo $ex->getTraceAsString();
}

【設定ファイル】

URL=localhost
USER=root
PSWD=root
DB=test_db

INSERT

1万件データを登録するPHPプログラムを作成し、3回繰り返した結果です。

DB 1回目 2回目 3回目
SQLite 61.217s 61.768s 62.976s
MariaDB 27.388s 24.483s 20.659s

(ー△ー;)エッ、マジ?!!!
と思いました。

いままで、さんざんSQLiteは早いと言っておきながら、2~3倍MariaDBの方が早かったです・・・ゴメンナサイ

UPDATE

1万件データを更新するPHPプログラムを作成し、3回繰り返した結果です。

DB 1回目 2回目 3回目
SQLite 72.629s 65.496s 60.059s
MariaDB 33.099s 27.683s 27.336s

更新についても、同様の結果でした。

大きなシステムで使用するには耐えきれないと思いますが、
通常のアプリケーションで使用するのであれば問題ないと思います。(そう信じています)

  • このエントリーをはてなブックマークに追加

PAGE TOP