概要 :このチュートリアルでは、SQLite VACUUM
を使用する必要がある理由を説明します コマンドを実行し、それを使用してデータベースファイルを最適化する方法を示します。
SQLite VACUUM
が必要な理由 コマンド
まず、テーブル、ビュー、インデックス、トリガーなどのデータベースオブジェクトを削除したり、テーブルからデータを削除したりしても、データベースのファイルサイズは変更されません。 SQLiteは削除されたオブジェクトを空きとしてマークし、将来の使用のために予約するためです。その結果、データベースファイルのサイズは常に大きくなります。
次に、テーブルからデータを挿入または削除すると、特に挿入、更新、削除の数が多いデータベースの場合、インデックスとテーブルが断片化されます。
第3に、挿入、更新、および削除操作により、個々のデータベースページ内に未使用のデータブロックが作成されます。 1ページに保存できる行数が減ります。したがって、テーブルを保持するページ数が増えます。このため、テーブルのストレージオーバーヘッドが増加し、読み取り/書き込みに時間がかかり、キャッシュパフォーマンスが低下します。
SQLiteはVACUUM
を提供します 上記の3つの問題すべてに対処するコマンド。
SQLiteはまず、データベースファイル内のデータを一時データベースにコピーします。この操作は、データベースオブジェクトをデフラグし、空き領域を無視して、個々のページを再パックします。次に、SQLiteは一時データベースファイルの内容を元のデータベースファイルにコピーします。元のデータベースファイルは上書きされます。
VACUUM
コマンドはデータベースを再構築します。これを使用して、ページサイズ、ページ形式、デフォルトのエンコーディングなどのデータベース固有の構成パラメーターを変更できます。これを行うには、プラグマを使用して新しい値を設定してから、データベースをバキュームします。
SQLite VACUUM
コマンド
VACUUM
コマンドは、ROWID値を除いてデータベースの内容を変更しません。 INTEGER PRIMARY KEY
を使用する場合 列、VACUUM
その列の値は変更されません。ただし、エイリアスなしのROWIDを使用する場合は、VACUUM
コマンドはROWID値をリセットします。 ROWID値の変更に加えて、VACUUM
コマンドは、インデックスを最初から作成します。
VACUUM
を実行することをお勧めします 特にデータベースから大きなテーブルやインデックスを削除する場合は、定期的にコマンドを実行してください。
VACCUM
に注意することが重要です コマンドには、元のファイルとコピーを保持するためのストレージが必要です。また、VACUUM
コマンドには、データベースファイルへの排他的アクセスが必要です。つまり、VACUUM
データベースに保留中のSQLステートメントまたは開いているトランザクションがある場合、コマンドは正常に実行されません。
現在、バージョン3.9.2の時点で、VACUUM
を実行できます。 main
のコマンド 添付されたデータベースファイルではなく、データベース。
SQLiteは、いくつかの制限付きでバキュームプロセスを自動的にトリガーする自動バキュームモードを有効にしますが。 VACUUM
を実行することをお勧めします 手動でコマンドします。
SQLite VACUUM
を実行する方法 コマンド
以下に、VACUUM
を実行する方法を示します。 コマンド:
VACUUM;
Code language: SQL (Structured Query Language) (sql)
コマンドの実行中は、開いているトランザクションがないことを確認してください。
次のステートメントは、完全自動真空モードを有効にします。
PRAGMA auto_vacuum = FULL;
Code language: SQL (Structured Query Language) (sql)
インクリメンタルバキュームを有効にするには、次のステートメントを使用します。
PRAGMA auto_vacuum = INCREMENTAL;
Code language: SQL (Structured Query Language) (sql)
次のステートメントは、自動真空モードを無効にします。
PRAGMA auto_vacuum = NONE;
Code language: SQL (Structured Query Language) (sql)
VACUUM
INTO
を使用 条項
VACUUM
の構文は次のとおりです INTO
を使用 条項:
VACUUM schema-name INTO filename;
Code language: SQL (Structured Query Language) (sql)
VACUUM
INTO
を含むステートメント 句は、元のデータベースファイルを変更せずに保持し、指定されたファイル名で新しいデータベースを作成します。新しいデータベースには、元のデータベースと同じ論理コンテンツが含まれますが、完全に真空化されています。
filename
INTO
で 句は、文字列に評価される任意のSQL式にすることができます。存在しないファイルまたは空のファイルへのパス、またはVACUUM INTO
へのパスである必要があります コマンドを実行するとエラーが発生します。
VACUUM
コマンドは、ライブデータベースのバックアップコピーを生成するのに非常に便利です。トランザクションセーフであり、生成されたデータベースは元のデータベースの一貫したスナップショットです。ただし、計画外のシャットダウンまたは電源喪失によってコマンドが中断されると、生成されたデータベースが破損する可能性があります。
次のステートメントは、VACUUM INTO
を使用しています chinook_backup.db
というファイル名で新しいデータベースを生成するコマンド main
からデータがコピーされた chinook
のスキーマ データベース:
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
Code language: JavaScript (javascript)
このチュートリアルでは、SQLite VACUUM
を使用する必要がある理由を学びました。 コマンドとそれを実行してデータベースを最適化する方法。