Как VACUUM базы данных SQLite БД? - PullRequest
9 голосов
/ 07 октября 2009

По своей сути Core Data не выдает команду SQL VACUUM для своих баз данных SQLite, как указано здесь Я создаю приложение Core Data, которое будет хранить, а затем удалять большие двоичные файлы (размером 2-10 МБ) в базе данных SQLite. Со временем это приведет к фрагментации и увеличению размера базы данных SQLite. Я хотел бы периодически вводить команду VACUUM, скажем, во время запуска операции очистки.

  • Как программно выполнить команду VACUUM для хранилищ SQLite Core Data?
  • Можно ли сделать это через Core Data или я должен смонтировать базу данных SQLite и подключиться к ней напрямую для выполнения VACUUM SQL?

Ответы [ 2 ]

12 голосов
/ 09 октября 2009

Поддерживаемый способ сделать это в OS X 10.6 / iOS 3.0 и более поздних версиях - установить NSSQLiteManualVacuumOption в параметрах при добавлении хранилища в координатор постоянного хранилища.

2 голосов
/ 30 декабря 2009

Да, vacuum - это признанный оператор SQL в SQLite. Его можно использовать как обычный запрос, или около того он говорит .

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

...