SQLiteでレコードを削除(DELETE)してもファイルサイズは変わりません。
これは、削除したエリアをそのままにして再活用するためです。
従って、開いた(削除した)領域を開放するには、VACUUMというコマンドにより領域の開放を行わないといけません。
以下に例を記しながら説明します。
尚、操作はUbuntuで行いました。
使用するデータベースとデータ内容は以下の通りです。
sakura@ubuntu:~$ ls -l 合計 4 -rw-r--r-- 1 sakura sakura 4096 2月 7 10:47 testdb.sqlite3
SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .tables t1 sqlite> .schema t1 CREATE TABLE t1 ( a, b, c ); sqlite> select count(*) from t1; 88 sqlite> .q
sakura@ubuntu:~$ sqlite3 testdb.sqlite3 SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> delete from t1; sqlite> select count(*) from t1; 0 sqlite> .q
sakura@ubuntu:~$ ls -l 合計 4 -rw-r--r-- 1 sakura sakura 4096 2月 7 10:48 testdb.sqlite3
vacuum;コマンドを実行したあとの結果です。
ファイルサイズが小さくなっているのが確認できます。
つまり空きエリアを開放したのが確認できました。
sakura@ubuntu:~$ sqlite3 testdb.sqlite3 SQLite version 3.7.9 2011-11-01 00:52:41 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> vacuum; sqlite> .q sakura@ubuntu:~$ ls -l 合計 4 -rw-r--r-- 1 sakura sakura 2048 2月 7 10:50 testdb.sqlite3
以上、SQLiteで削除してもファイルサイズが小さくならない場合の対処方法でした。