Подтвердить что ты не робот

Измените размер файла sqlite после "DELETE FROM table"

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

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

Чем я сделал

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

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

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

4b9b3361

Ответ 1

Команда, которую вы ищете, vacuum. Существует также pragma, чтобы включить автоматическое вакуумирование.

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

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

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

Ответ 2

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

$db->exec("vacuum");

после

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

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

Ответ 3

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