change sqlite file size after “DELETE FROM table”

The command you are looking for is vacuum. There is also a pragma to turn auto-vacuuming on.

From the documentation:

When an object (table, index, trigger,
or view) is dropped from the database,
it leaves behind empty space. This
empty space will be reused the next
time new information is added to the
database. But in the meantime, the
database file might be larger than
strictly necessary. Also, frequent
inserts, updates, and deletes can
cause the information in the database
to become fragmented – scrattered out
all across the database file rather
than clustered together in one place.

The VACUUM command cleans the main
database by copying its contents to a
temporary database file and reloading
the original database file from the
copy. This eliminates free pages,
aligns table data to be contiguous,
and otherwise cleans up the database
file structure.

Leave a Comment