Почему очистка базы данных SQLite не уменьшает ее размер?

У меня есть база данных SQLite.

Я создал таблицы и заполнил их большим количеством данных.

Затем я очистил базу данных, удалив и заново создав таблицы. Я подтвердил, что все данные были удалены, а таблицы были пустыми, посмотрев на них с помощью администратора SQLite.

Проблема в том, что размер файла базы данных (*.db3) остался прежним после того, как он был очищен.

Это, конечно, нежелательно, так как я хотел бы вернуть пространство, которое было воспринято данными после его очистки.

Кто-нибудь сделал подобное наблюдение и/или знал, что происходит?

Что можно сделать по этому поводу?

Ответы

Ответ 1

От здесь:

Когда объект (таблица, индекс, триггер или представление) удаляется из базы данных, он оставляет пустое пространство. Это пустое пространство будет повторно использовано в следующий раз, когда новая информация будет добавлена ​​в базу данных. Но в то же время файл базы данных может быть больше, чем это необходимо. Кроме того, частые вставки, обновления и удаления могут привести к тому, что информация в базе данных станет фрагментированной, - скомпилированные по всему файлу базы данных, а не кластерные вместе в одном месте.

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

Ответ 2

Размеры баз данных работают как водяные знаки, например. если вода поднимается, знак воды поднимается, когда вода получает отметку о воде, где она была

Вы должны изучить сжатые базы данных