Почему в моей базе данных SQLite есть неиспользуемые страницы? - PullRequest
0 голосов
/ 10 февраля 2012

Если я посмотрю в настройках базы данных моей базы данных (с помощью SQLite Manager), у меня будет freelist_count 16. Согласно этому источнику число freelist равно

числонеиспользуемых страниц в файле базы данных

Что подразумевается под неиспользуемыми страницами и почему существуют неиспользуемые страницы?Разве плохо иметь количество фриланлистов больше нуля?Что я могу сделать, чтобы уменьшить число до нуля?

1 Ответ

2 голосов
/ 10 февраля 2012

Из FAQ по SQLite :

(12) Я удалил много данных, но файл базы данных не стал меньше.Это ошибка?

Нет.Когда вы удаляете информацию из базы данных SQLite, неиспользуемое дисковое пространство добавляется во внутренний «свободный список» и используется повторно при следующей вставке данных.Дисковое пространство не потеряно.Но он также не возвращается в операционную систему.

Если вы удалили много данных и хотите сжать файл базы данных, запустите команду VACUUM.VACUUM восстановит базу данных с нуля.Это оставит базу данных с пустым свободным списком и файлом минимального размера.Однако обратите внимание, что запуск VACUUM может занять некоторое время (около полсекунды на мегабайт в системе Linux, где разрабатывается SQLite), и он может использовать вдвое больше временного дискового пространства, чем исходный файл во время работы.

Начиная с SQLite версии 3.1, альтернативой использованию команды VACUUM является режим автоматического вакуума, включаемый с помощью прагмы auto_vacuum.

Нет ничего плохого в том, чтобы иметь несколько свободных страниц, еслиони занимают значительное количество места.Вам решать, где заканчивается «ничего плохого» и начинается «значимое», в зависимости от потребностей вашего приложения.

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