SQLiteでSQL文の実行速度を上げる方法とは?

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

こんにちは、WPホームページ研究所の運営サポートチーム(@WP_LABO)です。

SQLiteではトランザクション開始やコミット完了を明記しなければオートコミットがONになるのでループ処理に時間がかかります。オートコミットOFFでSQL文を実行すると処理速度が何倍にも改善するのでおすすめです。オートコミットを使うかどうかは処理で決めるといいかもしれません。

トランザクションは「複数のSQL文を1つの処理としてまとめてデータベースに反映すること」を言います。

1. トランザクションを開始
      ↓
2. 各処理用のSQL文を読み込む
      ↓
3. 最後にコミットをする

処理の始まりポイントと最終実行ポイントを明記することでオートコミットがオフになるというわけですね。

SQLiteでSQL文の実行速度を上げる方法とは?

オートコミットをOFFにするにはトランザクションやコミットを追記すればOKです。

トランザクションの開始

以下がトランザクションの開始です。

$db->exec('begin');

トランザクションをコミットする

コミットは下記です。

$db->exec('commit');

ともにループの内側に書くとSQLのたびに実行されてしまうのでループ外に書きましょう。トランザクションを明記してオートコミットをOFFにするだけで10万件のデータ登録が70〜80秒⇒1秒未満になります。

実際の業務でも複数のSQLを実行するならトランザクションを明記しておくと処理が軽くなるので必要に応じてトランザクションからコミットまでの処理を追記(オートコミットを使わない)しておきましょう。

トランザクションをキャンセル

カンタンに言えばトランザクションは「データベース処理中のエラーに対応する仕組み」。必要に応じて合わせて処理をキャンセル(ロールバック)することもできます。下記がロールバックを行う命令文です。

$db->exec('rollback');

PHPの条件分岐で以下を使い分けるようにしましょう。

・問題が発生しなかったらコミットする
・問題が発生したらロールバックさせる

オートコミットなら随時データベースに値が登録されていくので便利な機能ですね。

実際に明記した例をご紹介

以前に書いた「テストデータを10万件登録するSQL」での記述例は下記です。

// トランザクションを開始する
$db->exec('begin');

$id = 1;
$i = 0;
while ($i < 100000) {
	$name = $id;
	$stmt = $db->prepare("INSERT INTO data_base_name(id,name) VALUES (:id,:name)");
	$stmt->bindValue(':id', $id, PDO::PARAM_INT);
	$stmt->bindValue(':name', $name);
	$stmt->execute();
	$id++;
	$i++;
}

// すべてをコミットする
$db->exec('commit');

もし「コミットかロールバックか?」をエラー処理に分けて書くなら条件分岐を足せばOKです。SQLiteでは同時に書き込む可能性がある場合は「コミットのタイミングが重要」となります。仕組みとしてトランザクションの開始ではデータベースファイルはロックされないので状況に応じて処理を書けば安心ですね。

最新式の無料プラグインを事前公開

WordPressは公式サイトに登録済みのプラグインだけで全機能を補足しきれません。当サイトでは使いやすさを追求した魅惑的なプラグインを無料でダウンロードいただけます。運営ホームページのマーケティング力をさらに高めるチャンスです。まずは無料でDLしてお試しくださいませ。
改良されたプラグインを確認する

ワードプレス専門家に丸投げする

WPホームページ研究所はワードプレスを中心としたブログ作成・ホームページ制作・オウンドメディア構築・プラグイン設定・調整など幅広いカスタマイズに対応しております。 記事の掲載情報だけでなくお好みの機能をいただければ専属スタッフが心を込めて真摯に対応させていただきます。お気軽にお問い合わせください。

お問い合わせの種類をお選びください(もっとも近い項目)

法人の場合は法人名とご担当者のお名前をご入力ください

返信時のご連絡に利用するメールアドレスをご入力ください

運営中のウェブサイトURLがあればご入力ください

お困りの内容があれば詳しい内容をお聞かせください

💻SEOに強いWordPressテーマ

⇒ 大人気のワードプレステーマ「賢威」  2万を超えるお客様がご使用中!