空き領域の開放

データベースを作成しテーブルを追加したりテーブルにデータを追加していくとファイルサイズは大きくなっていきます。ただ逆にデータを削除してもファイルサイズは小さくなりません。空いた領域はそのままにしておき、後からデータが追加された場合に利用されます。

データの追加と削除が頻繁に行われるのでなければそれほど気にしなくても構いませんが、空き領域があまりにも多くなった場合には不必要にサイズが大きいデータベースとなります。また追加と削除を繰り返すことによって細切れの領域が増えるとパフォーマンスに影響する場合があります。

このような場合にVACUUM文を実行すると空き領域を開放してくれます。

VACUUM;

実際にはデータベースの内容をテンポラリデータベースに移し、再度戻すという処理が行われます。この結果、空き領域を無くすと同時にデータを順番に格納しなおす作業が行われます。

注意すべき点としては、VACUUM文の対象となるのはmainデータベースのみです。アタッチしているデータベースがあったとしてもVACUUM文の対象とはなりません。またINTEGER PRIMARY KEYが設定されたカラムが無いテーブルの場合、格納されているデータに割り当てられたROWIDが変更されることがあります。

サンプル

では実際に試してみます。新しくデータベースを作成しテーブルを一つだけ作成しました。ファイルサイズは2,048バイトとなっています。

p1-1

ではテーブルに適当にデータを追加してみます。

p1-2

ファイルサイズは8,192バイトとなっています。

今度はデータを削除してみます。

p1-3

データは削除してもファイルサイズに変化はありません。

再度データベースに接続し、VACUUM文を実行してみます。

vacuum;

p1-4

ファイルサイズが8,192バイトから3,072バイトへ減少したことが確認できます。