SQLite
 sql >> Baza danych >  >> RDS >> SQLite

ODKURZACZ SQLite

Podsumowanie :w tym samouczku wyjaśnimy, dlaczego musisz użyć SQLite VACUUM i pokaż, jak go użyć do optymalizacji pliku bazy danych.

Dlaczego potrzebujesz SQLite VACUUM polecenie

Po pierwsze, po usunięciu obiektów bazy danych, takich jak tabele, widoki, indeksy i wyzwalacze lub usunięciu danych z tabel, rozmiar pliku bazy danych pozostaje niezmieniony. Ponieważ SQLite po prostu oznacza usunięte obiekty jako wolne i rezerwuje je do przyszłych zastosowań. W rezultacie rozmiar pliku bazy danych zawsze rośnie.

Po drugie, kiedy wstawiasz lub usuwasz dane z tabel, indeksy i tabele ulegają fragmentacji, szczególnie w przypadku bazy danych, która ma dużą liczbę wstawień, aktualizacji i usunięć.

Po trzecie, operacje wstawiania, aktualizowania i usuwania tworzą nieużywany blok danych na poszczególnych stronach bazy danych. Zmniejsza liczbę wierszy, które można przechowywać na jednej stronie. Dlatego zwiększa liczbę stron do przechowywania tabeli. Z tego powodu zwiększa obciążenie pamięci dla tabeli, zajmuje więcej czasu na odczyt/zapis i zmniejsza wydajność pamięci podręcznej.

SQLite zapewnia VACUUM polecenie, aby rozwiązać wszystkie trzy powyższe problemy.

SQLite najpierw kopiuje dane z pliku bazy danych do tymczasowej bazy danych. Ta operacja defragmentuje obiekty bazy danych, ignoruje wolne miejsca i ponownie pakuje poszczególne strony. Następnie SQLite kopiuje zawartość tymczasowego pliku bazy danych z powrotem do oryginalnego pliku bazy danych. Oryginalny plik bazy danych zostanie nadpisany.

Ponieważ VACUUM Polecenie odbudowuje bazę danych, można go użyć do zmiany niektórych parametrów konfiguracyjnych specyficznych dla bazy danych, takich jak rozmiar strony, format strony i domyślne kodowanie. Aby to zrobić, ustaw nowe wartości za pomocą pragmy, a następnie odkurz bazę danych.

SQLite VACUUM polecenie

VACUUM Polecenie nie zmienia zawartości bazy danych z wyjątkiem wartości wierszy. Jeśli używasz INTEGER PRIMARY KEY kolumna VACUUM nie zmienia wartości tej kolumny. Jeśli jednak używasz rowid bez aliasów, VACUUM polecenie zresetuje wartości wierszy. Oprócz zmiany wartości wierszy, VACUUM polecenie również buduje indeks od podstaw.

Dobrą praktyką jest wykonanie VACUUM polecenie okresowo, zwłaszcza gdy usuwasz duże tabele lub indeksy z bazy danych.

Należy pamiętać, że VACCUM polecenie wymaga pamięci do przechowywania oryginalnego pliku, a także kopii. Również VACUUM polecenie wymaga wyłącznego dostępu do pliku bazy danych. Innymi słowy, VACUUM polecenie nie zostanie uruchomione pomyślnie, jeśli baza danych zawiera oczekującą instrukcję SQL lub otwartą transakcję.

Obecnie, od wersji 3.9.2, możesz uruchomić VACUUM polecenie na main bazy danych, a nie dołączonego pliku bazy danych.

Mimo że SQLite włącza tryb automatycznego odkurzania, który automatycznie uruchamia proces odkurzania z pewnymi ograniczeniami. Dobrą praktyką jest uruchomienie VACUUM polecenie ręcznie.

Jak uruchomić SQLite VACUUM polecenie

Poniżej pokazano, jak uruchomić VACUUM polecenie:

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

Upewnij się, że nie ma otwartej transakcji podczas wykonywania polecenia.

Poniższa instrukcja włącza pełny tryb automatycznego odkurzania:

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

Aby włączyć przyrostową próżnię, użyj następującej instrukcji:

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

Poniższa instrukcja wyłącza tryb automatycznego odkurzania:

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

VACUUM z INTO klauzula

Oto składnia VACUUM z INTO klauzula:

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

VACUUM instrukcja z INTO Klauzula zachowuje oryginalny plik bazy danych bez zmian i tworzy nową bazę danych o określonej nazwie pliku. Nowa baza danych będzie zawierać tę samą zawartość logiczną, co oryginalna baza danych, ale w pełni odkurzona.

filename w INTO Klauzula może być dowolnym wyrażeniem SQL, którego wynikiem jest łańcuch. Musi to być ścieżka do pliku, który nie istnieje lub do pustego pliku, lub VACUUM INTO polecenie spowoduje błąd.

VACUUM Polecenie jest bardzo przydatne do tworzenia kopii zapasowych działającej bazy danych. Jest bezpieczny transakcyjnie, a wygenerowana baza danych jest spójną migawką oryginalnej bazy danych. Jeśli jednak nieplanowane wyłączenie lub utrata zasilania przerwie wykonanie polecenia, wygenerowana baza danych może zostać uszkodzona.

Poniższa instrukcja używa VACUUM INTO polecenie do wygenerowania nowej bazy danych o nazwie pliku chinook_backup.db którego dane są kopiowane z main schemat chinook baza danych:

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

W tym samouczku dowiedziałeś się, dlaczego musisz używać SQLite VACUUM polecenie i jak go uruchomić, aby zoptymalizować bazę danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aktualizacja SQLite

  2. Jak działa funkcja Strftime() w SQLite

  3. Tabela bazy danych Android SQLite nie jest tworzona

  4. Jak sprawdzić, czy użytkownik jest obecny w bazie danych Sqlite za pomocą Androida?

  5. Jak sprawić, by operator LIKE SQLite uwzględniał wielkość liter?