изменить размер файла sqlite после «УДАЛИТЬ ИЗ таблицы» - PullRequest
59 голосов
/ 27 января 2010

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

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

Чем я сделал

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

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

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

Ответы [ 3 ]

97 голосов
/ 27 января 2010

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

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

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

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

28 голосов
/ 25 августа 2016

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

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

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

0 голосов
/ 28 апреля 2016

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

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