Почему очистка базы данных SQLite не уменьшает ее размер? - PullRequest
15 голосов
/ 30 марта 2010

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

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

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

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

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

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

Что с этим можно сделать?

Ответы [ 2 ]

25 голосов
/ 30 марта 2010

С здесь :

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

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

3 голосов
/ 30 марта 2010

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

Вы должны изучить сокращающиеся базы данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...