Zusammenfassung :In diesem Tutorial erklären wir, warum Sie das SQLite VACUUM
verwenden müssen Befehl und zeigen Sie, wie Sie ihn verwenden, um die Datenbankdatei zu optimieren.
Warum brauchen Sie SQLite VACUUM
Befehl
Erstens:Wenn Sie Datenbankobjekte wie Tabellen, Ansichten, Indizes und Trigger löschen oder Daten aus Tabellen löschen, bleibt die Dateigröße der Datenbank unverändert. Denn SQLite markiert die gelöschten Objekte einfach als frei und reserviert sie für zukünftige Verwendungen. Dadurch wächst die Größe der Datenbankdatei immer weiter an.
Zweitens werden die Indizes und Tabellen fragmentiert, wenn Sie Daten aus den Tabellen einfügen oder löschen, insbesondere bei Datenbanken mit einer hohen Anzahl von Einfügungen, Aktualisierungen und Löschungen.
Drittens erzeugen die Einfüge-, Aktualisierungs- und Löschoperationen ungenutzte Datenblöcke innerhalb einzelner Datenbankseiten. Es verringert die Anzahl der Zeilen, die auf einer einzelnen Seite gespeichert werden können. Daher wird die Anzahl der Seiten für eine Tabelle erhöht. Aus diesem Grund erhöht es den Speicheraufwand für die Tabelle, benötigt mehr Zeit zum Lesen/Schreiben und verringert die Cache-Leistung.
SQLite stellt das VACUUM
bereit Befehl, um alle drei oben genannten Probleme zu lösen.
SQLite kopiert zuerst Daten innerhalb einer Datenbankdatei in eine temporäre Datenbank. Diese Operation defragmentiert die Datenbankobjekte, ignoriert die freien Plätze und packt einzelne Seiten neu. Anschließend kopiert SQLite den Inhalt der temporären Datenbankdatei zurück in die ursprüngliche Datenbankdatei. Die ursprüngliche Datenbankdatei wird überschrieben.
Denn das VACUUM
Wenn der Befehl die Datenbank neu erstellt, können Sie ihn verwenden, um einige datenbankspezifische Konfigurationsparameter wie Seitengröße, Seitenformat und Standardkodierung zu ändern. Dazu setzen Sie per Pragma neue Werte und leeren dann die Datenbank.
Das SQLite VACUUM
Befehl
Das VACUUM
Der Befehl ändert den Inhalt der Datenbank mit Ausnahme der rowid-Werte nicht. Wenn Sie INTEGER PRIMARY KEY
verwenden Spalte, das VACUUM
ändert die Werte dieser Spalte nicht. Wenn Sie jedoch eine Zeilen-ID ohne Alias verwenden, wird der VACUUM
Der Befehl setzt die rowid-Werte zurück. Neben dem Ändern der rowid-Werte, VACUUM
Befehl baut auch den Index von Grund auf neu auf.
Es empfiehlt sich, das VACUUM
durchzuführen regelmäßig ausführen, insbesondere wenn Sie große Tabellen oder Indizes aus einer Datenbank löschen.
Es ist wichtig zu beachten, dass der VACCUM
Der Befehl erfordert Speicherplatz, um die Originaldatei und auch die Kopie zu speichern. Auch das VACUUM
Der Befehl erfordert exklusiven Zugriff auf die Datenbankdatei. Mit anderen Worten, das VACUUM
Der Befehl wird nicht erfolgreich ausgeführt, wenn die Datenbank eine ausstehende SQL-Anweisung oder eine offene Transaktion hat.
Derzeit können Sie ab Version 3.9.2 das VACUUM
ausführen Befehl auf dem main
Datenbank, nicht die angehängte Datenbankdatei.
Obwohl SQLite den Auto-Vakuum-Modus aktiviert, der den Vakuum-Prozess mit einigen Einschränkungen automatisch auslöst. Es empfiehlt sich, VACUUM
auszuführen Befehl manuell.
Wie man SQLite VACUUM
ausführt Befehl
Im Folgenden wird gezeigt, wie das VACUUM
ausgeführt wird Befehl:
VACUUM;
Code language: SQL (Structured Query Language) (sql)
Stellen Sie sicher, dass keine offene Transaktion vorhanden ist, während Sie den Befehl ausführen.
Die folgende Anweisung aktiviert den vollständigen Auto-Vakuum-Modus:
PRAGMA auto_vacuum = FULL;
Code language: SQL (Structured Query Language) (sql)
Um das inkrementelle Vakuum zu aktivieren, verwenden Sie die folgende Anweisung:
PRAGMA auto_vacuum = INCREMENTAL;
Code language: SQL (Structured Query Language) (sql)
Die folgende Anweisung deaktiviert den Auto-Vakuum-Modus:
PRAGMA auto_vacuum = NONE;
Code language: SQL (Structured Query Language) (sql)
VACUUM
mit einem INTO
Klausel
Hier ist die Syntax des VACUUM
mit INTO
Klausel:
VACUUM schema-name INTO filename;
Code language: SQL (Structured Query Language) (sql)
Das VACUUM
Anweisung mit einem INTO
-Klausel behält die ursprüngliche Datenbankdatei unverändert bei und erstellt eine neue Datenbank mit dem angegebenen Dateinamen. Die neue Datenbank enthält den gleichen logischen Inhalt wie die ursprüngliche Datenbank, jedoch vollständig bereinigt.
Der filename
im INTO
-Klausel kann ein beliebiger SQL-Ausdruck sein, der als Zeichenfolge ausgewertet wird. Es muss ein Pfad zu einer Datei sein, die nicht existiert, oder zu einer leeren Datei, oder VACUUM INTO
Befehl führt zu einem Fehler.
Das VACUUM
Der Befehl ist sehr nützlich, um Sicherungskopien einer Live-Datenbank zu erstellen. Es ist transaktionssicher, da die generierte Datenbank eine konsistente Momentaufnahme der ursprünglichen Datenbank ist. Wenn jedoch ein ungeplantes Herunterfahren oder ein Stromausfall den Befehl unterbricht, ist die generierte Datenbank möglicherweise beschädigt.
Die folgende Anweisung verwendet den VACUUM INTO
Befehl zum Generieren einer neuen Datenbank mit dem Dateinamen chinook_backup.db
dessen Daten aus dem main
kopiert werden Schema des chinook
Datenbank:
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
Code language: JavaScript (javascript)
In diesem Tutorial haben Sie gelernt, warum Sie SQLite VACUUM
verwenden müssen Befehl und wie man ihn ausführt, um die Datenbank zu optimieren.