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

Я работаю с файлом sqlite3.

во-первых, я ввел относительно большую базу данных, размер файла был около 100 МБ.

чем я сделал

$db->exec("DELETE FROM table");

и ввел только небольшую часть этой базы данных. Но размер файла остался 100 МБ.

что нужно сделать, чтобы изменить размер файла sqlite при удалении его содержимого?

3 ответов


команда, которую вы ищете, это вакууме. Существует также ПРАГМА включить авто-пылесосить на.

из документации:

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

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


вы можете сделать это

$db->exec("DELETE FROM table");
$db->exec("vacuum");

и размер файла будет изменен.


Очистка Базы Данных SQLite имеет две команды, предназначенные для очистки-reindex и vacuum. reindex используется для перестроения индексов. Он имеет две формы: переиндексация аргументе; reindex table_name|index_name;