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


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

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

чем я сделал

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

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

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

3 53

3 ответа:

команда, которую вы ищете, это вакууме. Существует также pragma для включения автоматического пылесоса.

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

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

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

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

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

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

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