Third impact
最終更新: 2010-04-24
更新者: 00000001
SQLite翻訳文書セットの一部です。
随時翻訳を続けています。

VACUUM

sql-statement ::= VACUUM [index-or-table-name]

VACUUM コマンドは、PostgreSQL にある類似のコマンドをモデルに作った SQLite の拡張です。 VACUUM が インデックスかテーブルの名前とともに呼び出されると、その名前のテーブルか インデックスが整理されると考えてください。 SQLite バージョン 1.0 では、VACUUM コマンドは、バックエンドデータベース ファイルを整理するために gdbm_reorganize() を呼び出していました。

バージョン 2.0.0 で GDBM バックエンドが SQLite から切り離されたとき、VACUUM は 何もしなくなりました。 VACUUM は、バージョン 2.8.1 で再実装されました。 インデックスあるいはテーブル名の引数は、現在無視されます。

オブジェクト(テーブル、インデックス、トリガー)がデーターベースから削除されるとき、 そこには空の空間が残ります。 これは、データベースファイルを必要とされるよりも大きくしますが、挿入の速度を速くできます。 そのうち、挿入と削除はデータベースファイル構造を断片化していきます。 そしてそれは、データベースコンテンツのためのディスクアクセスを遅くしていきます。 VACUUM コマンドは、一時データベースファイルへ内容をコピーし、そしてコピーからオリジナルの データベースファイルをリロードすることによってメインデータベースをきれいにします。 これは、フリーページを削除し、テーブルデータを連続させるために整列させ、データベース ファイル構造をきれいにします。

VACUUM コマンドは、明示的な INTEGER PRIMARY KEY を持たないテーブルで要素の ROWID を変える場合があります。

VACUUM は、メインデータベース上でのみ機能します。 アタッチされたデータベースファイルの VACUUM はできません。

VACUUM コマンドは、アクティブなトランザクションがあると失敗します。 VACUUM コマンドは、メモリー上のデータベースでは何もしません。

SQLite バージョン 3.1 の時点で、VACUUM コマンドは、auto-vacuum モード を持ち、 auto_vacuum pragma を使って有効化できます。 auto-vacuum がデータベースに対して有効な時、多量の削除を行うとデータベースファイルを 縮小します。 しかしながら、auto-vacuum は依然として、データベースファイルに超過断片を引き起こします。 そして、auto-vacuum は、VACUUM がするようにデータベースの部分的に埋められたページを 圧縮したりはしません。

This page last modified on 2007/08/09 00:00:26
お知らせ
Wiki始めました。