Почему очистка базы данных SQLite не уменьшает ее размер?
У меня есть база данных SQLite.
Я создал таблицы и заполнил их большим количеством данных.
Затем я очистил базу данных, удалив и заново создав таблицы. Я подтвердил, что все данные были удалены, а таблицы были пустыми, посмотрев на них с помощью администратора SQLite.
Проблема в том, что размер файла базы данных (*.db3) остался прежним после того, как он был очищен.
Это, конечно, нежелательно, так как я хотел бы вернуть пространство, которое было воспринято данными после его очистки.
Кто-нибудь сделал подобное наблюдение и/или знал, что происходит?
Что можно сделать по этому поводу?
Ответы
Ответ 1
От здесь:
Когда объект (таблица, индекс, триггер или представление) удаляется из базы данных, он оставляет пустое пространство. Это пустое пространство будет повторно использовано в следующий раз, когда новая информация будет добавлена в базу данных. Но в то же время файл базы данных может быть больше, чем это необходимо. Кроме того, частые вставки, обновления и удаления могут привести к тому, что информация в базе данных станет фрагментированной, - скомпилированные по всему файлу базы данных, а не кластерные вместе в одном месте.
Команда VACUUM очищает основную базу данных, копируя ее содержимое во временный файл базы данных и перезагружая исходный файл базы данных из копии. Это устраняет бесплатные страницы, выравнивает данные таблиц, которые должны быть смежными, и в противном случае очищает структуру файлов базы данных.
Ответ 2
Размеры баз данных работают как водяные знаки, например. если вода поднимается, знак воды поднимается, когда вода получает отметку о воде, где она была
Вы должны изучить сжатые базы данных