Résumé :dans ce tutoriel, nous allons vous expliquer pourquoi vous devez utiliser le SQLite VACUUM
commande et montrez comment l'utiliser pour optimiser le fichier de base de données.
Pourquoi avez-vous besoin de SQLite VACUUM
commande
Tout d'abord, lorsque vous supprimez des objets de base de données tels que des tables, des vues, des index et des déclencheurs ou que vous supprimez des données de tables, la taille du fichier de base de données reste inchangée. Parce que SQLite marque simplement les objets supprimés comme libres et les réserve pour les utilisations futures. Par conséquent, la taille du fichier de base de données augmente toujours en taille.
Deuxièmement, lorsque vous insérez ou supprimez des données dans les tables, les index et les tables se fragmentent, en particulier pour la base de données qui a un nombre élevé d'insertions, de mises à jour et de suppressions.
Troisièmement, les opérations d'insertion, de mise à jour et de suppression créent des blocs de données inutilisés dans des pages de base de données individuelles. Cela diminue le nombre de lignes pouvant être stockées dans une seule page. Par conséquent, cela augmente le nombre de pages pour contenir une table. De ce fait, cela augmente la surcharge de stockage de la table, prend plus de temps pour lire/écrire et diminue les performances du cache.
SQLite fournit le VACUUM
commande pour résoudre les trois problèmes ci-dessus.
SQLite copie d'abord les données d'un fichier de base de données vers une base de données temporaire. Cette opération défragmente les objets de la base de données, ignore les espaces libres et recompresse les pages individuelles. Ensuite, SQLite copie le contenu du fichier de base de données temporaire dans le fichier de base de données d'origine. Le fichier de base de données d'origine est écrasé.
Parce que le VACUUM
reconstruit la base de données, vous pouvez l'utiliser pour modifier certains paramètres de configuration spécifiques à la base de données tels que la taille de la page, le format de la page et l'encodage par défaut. Pour ce faire, vous définissez de nouvelles valeurs à l'aide de pragma, puis videz la base de données.
Le SQLite VACUUM
commande
Le VACUUM
La commande ne modifie pas le contenu de la base de données à l'exception des valeurs rowid. Si vous utilisez INTEGER PRIMARY KEY
colonne, le VACUUM
ne modifie pas les valeurs de cette colonne. Cependant, si vous utilisez un rowid sans alias, le VACUUM
La commande réinitialisera les valeurs rowid. En plus de changer les valeurs rowid, le VACUUM
La commande crée également l'index à partir de zéro.
C'est une bonne pratique d'effectuer le VACUUM
commande périodiquement, en particulier lorsque vous supprimez des tables ou des index volumineux d'une base de données.
Il est important de noter que le VACCUM
La commande nécessite un espace de stockage pour contenir le fichier d'origine ainsi que la copie. De plus, le VACUUM
La commande nécessite un accès exclusif au fichier de base de données. En d'autres termes, le VACUUM
La commande ne s'exécutera pas correctement si la base de données a une instruction SQL en attente ou une transaction ouverte.
Actuellement, à partir de la version 3.9.2, vous pouvez exécuter le VACUUM
commande sur le main
base de données, pas le fichier de base de données joint.
Même si SQLite active le mode de vide automatique qui déclenche automatiquement le processus de vide avec certaines limitations. C'est une bonne pratique d'exécuter le VACUUM
commande manuellement.
Comment exécuter le SQLite VACUUM
commande
Ce qui suit montre comment exécuter le VACUUM
commande :
VACUUM;
Code language: SQL (Structured Query Language) (sql)
Assurez-vous qu'aucune transaction n'est ouverte pendant que vous exécutez la commande.
L'instruction suivante active le mode de vide automatique complet :
PRAGMA auto_vacuum = FULL;
Code language: SQL (Structured Query Language) (sql)
Pour activer le vide incrémentiel, utilisez l'instruction suivante :
PRAGMA auto_vacuum = INCREMENTAL;
Code language: SQL (Structured Query Language) (sql)
L'instruction suivante désactive le mode de vide automatique :
PRAGMA auto_vacuum = NONE;
Code language: SQL (Structured Query Language) (sql)
VACUUM
avec un INTO
clause
Voici la syntaxe du VACUUM
avec INTO
clause :
VACUUM schema-name INTO filename;
Code language: SQL (Structured Query Language) (sql)
Le VACUUM
instruction avec un INTO
La clause conserve le fichier de base de données d'origine inchangé et crée une nouvelle base de données avec le nom de fichier spécifié. La nouvelle base de données contiendra le même contenu logique que la base de données d'origine, mais entièrement aspirée.
Le filename
dans le INTO
La clause peut être n'importe quelle expression SQL dont la valeur est une chaîne. Il doit s'agir d'un chemin vers un fichier qui n'existe pas ou vers un fichier vide, ou le VACUUM INTO
la commande entraînera une erreur.
Le VACUUM
La commande est très utile pour générer des copies de sauvegarde d'une base de données en direct. Il s'agit d'une transaction sécurisée, dans laquelle la base de données générée est un instantané cohérent de la base de données d'origine. Cependant, si un arrêt non planifié ou une coupure de courant interrompt la commande, la base de données générée peut être corrompue.
L'instruction suivante utilise le VACUUM INTO
commande pour générer une nouvelle base de données avec le nom de fichier chinook_backup.db
dont les données sont copiées depuis le main
schéma du chinook
base de données :
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
Code language: JavaScript (javascript)
Dans ce tutoriel, vous avez appris pourquoi vous devez utiliser le SQLite VACUUM
commande et comment l'exécuter pour optimiser la base de données.