SQLite VACUUM
Der Befehl VACUUM kopiert den Inhalt der Hauptdatenbank in eine temporäre Datenbankdatei, leert dann die Hauptdatenbank und lädt die ursprüngliche Datenbankdatei aus der Kopie neu. Dadurch werden freie Seiten entfernt, die Daten in Tabellen in zusammenhängender Reihenfolge angeordnet und auch die Struktur der Datenbankdatei bereinigt.
Wenn die Tabelle keinen expliziten ganzzahligen Primärschlüssel (INTEGER PRIMARY KEY) hat, kann der Befehl VACUUM die Zeilen-IDs (ROWID) der Einträge in der Tabelle ändern. Der Befehl VACUUM gilt nur für die Hauptdatenbank; es ist nicht möglich, den Befehl VACUUM auf angehängte Datenbankdateien anzuwenden.
Der Befehl VACUUM schlägt fehl, wenn eine aktive Transaktion vorhanden ist. Der Befehl VACUUM ist für In-Memory-Datenbanken ein No-Op. Da der Befehl VACUUM die Datenbankdatei von Grund auf neu erstellt, kann VACUUM auch verwendet werden, um viele datenbankspezifische Konfigurationsparameter zu ändern.
Manuelles VACUUM
Im Folgenden sehen Sie die Syntax zum Ausführen des VACUUM-Befehls für die gesamte Datenbank an der Eingabeaufforderung:
$sqlite3 database_name "VACUUM;"
Sie können VACUUM auch in der SQLite-Eingabeaufforderung ausführen, wie unten gezeigt:
sqlite> VACUUM;
Sie können VACUUM auch für eine bestimmte Tabelle ausführen, wie unten gezeigt:
sqlite> VACUUM table_name;
Automatisches VACUUM (Auto-VACUUM)
SQLites Auto-VACUUM ist nicht ganz dasselbe wie VACUUM; es verschiebt nur freie Seiten an das Ende der Datenbank und verringert dadurch die Größe der Datenbank. Dadurch kann es die Datenbank erheblich fragmentieren, während VACUUM defragmentiert. Auto-VACUUM macht die Datenbank also nur kleiner.
In der SQLite-Eingabeaufforderung können Sie SQLites Auto-VACUUM über das folgende Pragma aktivieren/deaktivieren:
sqlite> PRAGMA auto_vacuum = NONE; -- 0 means disable auto vacuum sqlite> PRAGMA auto_vacuum = INCREMENTAL; -- 1 means enable incremental vacuum sqlite> PRAGMA auto_vacuum = FULL; -- 2 means enable full auto vacuum
Sie können den folgenden Befehl an der Eingabeaufforderung ausführen, um die Auto-Vacuum-Einstellung zu überprüfen:
$sqlite3 database_name "PRAGMA auto_vacuum;"Andere Erweiterungen