January 31, 2023

Как уменьшить базу данных sqlite?


Команда VACUUM перестраивает всю базу данных. Есть несколько причин, по которым приложение может это сделать:

- Если только SQLite не работает в режиме "auto_vacuum=FULL", при удалении большого количества данных из файла базы данных остается пустое пространство, или "свободные" страницы базы данных. Это означает, что файл базы данных может быть больше, чем это необходимо. Выполнение VACUUM для восстановления базы данных позволяет вернуть это пространство и уменьшить размер файла базы данных.
- Частые вставки, обновления и удаления могут привести к фрагментации файла базы данных, когда данные для одной таблицы или индекса разбросаны по всему файлу базы данных. Выполнение VACUUM гарантирует, что каждая таблица и индекс хранятся в файле базы данных в основном смежно. В некоторых случаях VACUUM может также уменьшить количество частично заполненных страниц в базе данных, что еще больше уменьшает размер файла базы данных...

Команда VACUUM работает путем копирования содержимого базы данных во временный файл базы данных, а затем перезаписывает оригинал содержимым временного файла. При перезаписи оригинала используется журнал отката или WAL-файл журнала записи вперед, как и при любой другой транзакции базы данных. Это означает, что при VACUUMing базы данных требуется вдвое больше свободного места на диске, чем размер исходного файла базы данных...


Just open a connection and execute the VACUUM command;

conn = sqlite3.connect(SQLITE_FILE)
conn.execute("VACUUM")
conn.close()
import sqlite3
conn = sqlite3.connect("database.db",isolation_level=None)
conn.execute("VACUUM")
conn.close()