SQLite
 sql >> Base de données >  >> RDS >> SQLite

VIDE SQLite

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.