SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite ВАКУУМ

Резюме :в този урок ще обясним защо трябва да използвате SQLite VACUUM команда и покажете как да я използвате за оптимизиране на файла на базата данни.

Защо имате нужда от SQLite VACUUM команда

Първо, когато пуснете обекти на база данни като таблици, изгледи, индекси и тригери или изтриете данни от таблици, размерът на файла на базата данни остава непроменен. Тъй като SQLite просто маркира изтритите обекти като безплатни и ги запазва за бъдещи употреби. В резултат на това размерът на файла на базата данни винаги нараства.

Второ, когато вмъквате или изтривате данни от таблиците, индексите и таблиците стават фрагментирани, особено за базата данни, която има голям брой вмъквания, актуализации и изтривания.

Трето, операциите за вмъкване, актуализиране и изтриване създават неизползван блок от данни в отделните страници на базата данни. Това намалява броя на редовете, които могат да бъдат съхранени в една страница. Следователно, той увеличава броя на страниците, за да задържи таблица. Поради това увеличава разходите за съхранение на таблицата, отнема повече време за четене/запис и намалява производителността на кеша.

SQLite предоставя VACUUM команда за справяне с трите проблема по-горе.

SQLite първо копира данни във файл на база данни във временна база данни. Тази операция дефрагментира обектите на базата данни, игнорира свободните места и преопакова отделни страници. След това SQLite копира съдържанието на временния файл на база данни обратно в оригиналния файл на базата данни. Оригиналният файл на базата данни е презаписан.

Тъй като VACUUM командата възстановява базата данни, можете да я използвате, за да промените някои специфични за базата данни конфигурационни параметри, като размер на страницата, формат на страницата и кодиране по подразбиране. За да направите това, задавате нови стойности с помощта на pragma и след това почиствате базата данни с вакуум.

SQLite VACUUM команда

VACUUM командата не променя съдържанието на базата данни, освен стойностите на rowid. Ако използвате INTEGER PRIMARY KEY колона, VACUUM не променя стойностите на тази колона. Въпреки това, ако използвате rowid без псевдоним, VACUUM командата ще нулира стойностите на rowid. Освен промяна на стойностите на rowid, VACUUM командата също така изгражда индекса от нулата.

Добра практика е да се извърши VACUUM командвайте периодично, особено когато изтривате големи таблици или индекси от база данни.

Важно е да се отбележи, че VACCUM командата изисква съхранение, за да съхранява оригиналния файл, а също и копието. Също така VACUUM командата изисква изключителен достъп до файла на базата данни. С други думи, VACUUM командата няма да се изпълнява успешно, ако базата данни има чакащ SQL израз или отворена транзакция.

Понастоящем, от версия 3.9.2, можете да стартирате VACUUM команда в main база данни, а не прикачения файл с база данни.

Въпреки че SQLite активира режима на автоматично вакуумиране, който задейства процеса на вакуумиране автоматично с някои ограничения. Добра практика е да стартирате VACUUM команда ръчно.

Как да стартирате SQLite VACUUM команда

По-долу е показано как да стартирате VACUUM команда:

VACUUM;Code language: SQL (Structured Query Language) (sql)

Уверете се, че няма отворена транзакция, докато изпълнявате командата.

Следното изявление активира пълен автоматичен режим на вакуумиране:

PRAGMA auto_vacuum = FULL;Code language: SQL (Structured Query Language) (sql)

За да активирате инкрементален вакуум, използвате следното изявление:

PRAGMA auto_vacuum = INCREMENTAL;Code language: SQL (Structured Query Language) (sql)

Следното изявление деактивира режима на автоматично вакуумиране:

PRAGMA auto_vacuum = NONE;Code language: SQL (Structured Query Language) (sql)

VACUUM с INTO клауза

Ето синтаксиса на VACUUM с INTO клауза:

VACUUM schema-name INTO filename;Code language: SQL (Structured Query Language) (sql)

VACUUM изявление с INTO клаузата запазва оригиналния файл на базата данни непроменен и създава нова база данни с посоченото име на файла. Новата база данни ще съдържа същото логическо съдържание като оригиналната база данни, но напълно вакуумирана.

filename в INTO клаузата може да бъде всеки SQL израз, който се оценява на низ. Трябва да е път към несъществуващ файл или към празен файл, или VACUUM INTO команда ще доведе до грешка.

VACUUM командата е много полезна за генериране на резервни копия на жива база данни. Това е безопасно за транзакции, като генерираната база данни е последователна моментна снимка на оригиналната база данни. Ако обаче непланирано изключване или загуба на захранване прекъснат командата, генерираната база данни може да е повредена.

Следното изявление използва VACUUM INTO команда за генериране на нова база данни с името на файла chinook_backup.db чиито данни се копират от main схема на chinook база данни:

VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';Code language: JavaScript (javascript)

В този урок научихте защо трябва да използвате SQLite VACUUM команда и как да я стартирате, за да оптимизирате базата данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е SQLite

  2. Как да инсталирате SQLite и SQLite браузър в Ubuntu

  3. Задайте стойност по подразбиране на целочислена колона SQLite

  4. Как да отрежете низ в SQLite

  5. Какво е SQLite?