Resumen :en este tutorial, explicaremos por qué necesita usar SQLite VACUUM
comando y mostrar cómo usarlo para optimizar el archivo de la base de datos.
¿Por qué necesita SQLite VACUUM
? comando
En primer lugar, cuando elimina objetos de la base de datos, como tablas, vistas, índices y activadores, o elimina datos de las tablas, el tamaño del archivo de la base de datos permanece sin cambios. Porque SQLite simplemente marca los objetos eliminados como libres y los reserva para usos futuros. Como resultado, el tamaño del archivo de la base de datos siempre crece.
En segundo lugar, cuando inserta o elimina datos de las tablas, los índices y las tablas se fragmentan, especialmente para la base de datos que tiene una gran cantidad de inserciones, actualizaciones y eliminaciones.
En tercer lugar, las operaciones de inserción, actualización y eliminación crean bloques de datos no utilizados dentro de las páginas individuales de la base de datos. Disminuye el número de filas que se pueden almacenar en una sola página. Por lo tanto, aumenta el número de páginas para sostener una tabla. Debido a esto, aumenta la sobrecarga de almacenamiento de la tabla, lleva más tiempo leer/escribir y disminuye el rendimiento de la memoria caché.
SQLite proporciona el VACUUM
comando para abordar los tres problemas anteriores.
SQLite primero copia los datos dentro de un archivo de base de datos a una base de datos temporal. Esta operación desfragmenta los objetos de la base de datos, ignora los espacios libres y vuelve a empaquetar páginas individuales. Luego, SQLite copia el contenido del archivo de la base de datos temporal al archivo de la base de datos original. El archivo de base de datos original se sobrescribe.
Porque el VACUUM
El comando reconstruye la base de datos, puede usarlo para cambiar algunos parámetros de configuración específicos de la base de datos, como el tamaño de página, el formato de página y la codificación predeterminada. Para hacer esto, establece nuevos valores usando pragma y luego vacía la base de datos.
El SQLite VACUUM
comando
El VACUUM
El comando no cambia el contenido de la base de datos excepto los valores de ID de fila. Si usa INTEGER PRIMARY KEY
columna, el VACUUM
no cambia los valores de esa columna. Sin embargo, si usa ID de fila sin alias, el VACUUM
El comando restablecerá los valores de ID de fila. Además de cambiar los valores de ID de fila, el VACUUM
El comando también crea el índice desde cero.
Es una buena práctica realizar el VACUUM
Comando periódicamente, especialmente cuando elimina tablas o índices grandes de una base de datos.
Es importante tener en cuenta que el VACCUM
El comando requiere almacenamiento para contener el archivo original y también la copia. Además, el VACUUM
El comando requiere acceso exclusivo al archivo de la base de datos. En otras palabras, el VACUUM
El comando no se ejecutará correctamente si la base de datos tiene una declaración SQL pendiente o una transacción abierta.
Actualmente, a partir de la versión 3.9.2, puede ejecutar VACUUM
comando en el main
base de datos, no el archivo de base de datos adjunto.
Aunque SQLite habilita el modo de vacío automático que activa el proceso de vacío automáticamente con algunas limitaciones. Es una buena práctica ejecutar el VACUUM
comando manualmente.
Cómo ejecutar SQLite VACUUM
comando
A continuación se muestra cómo ejecutar el VACUUM
comando:
VACUUM;
Code language: SQL (Structured Query Language) (sql)
Asegúrese de que no haya ninguna transacción abierta mientras ejecuta el comando.
La siguiente declaración habilita el modo de vacío automático completo:
PRAGMA auto_vacuum = FULL;
Code language: SQL (Structured Query Language) (sql)
Para habilitar el vacío incremental, utilice la siguiente instrucción:
PRAGMA auto_vacuum = INCREMENTAL;
Code language: SQL (Structured Query Language) (sql)
La siguiente declaración desactiva el modo de vacío automático:
PRAGMA auto_vacuum = NONE;
Code language: SQL (Structured Query Language) (sql)
VACUUM
con un INTO
cláusula
Aquí está la sintaxis del VACUUM
con INTO
cláusula:
VACUUM schema-name INTO filename;
Code language: SQL (Structured Query Language) (sql)
El VACUUM
declaración con un INTO
mantiene el archivo de base de datos original sin cambios y crea una nueva base de datos con el nombre de archivo especificado. La nueva base de datos tendrá el mismo contenido lógico que la base de datos original, pero completamente vacío.
El filename
en el INTO
La cláusula puede ser cualquier expresión SQL que se evalúe como una cadena. Debe ser una ruta a un archivo que no existe o a un archivo vacío, o el VACUUM INTO
comando dará como resultado un error.
El VACUUM
El comando es muy útil para generar copias de seguridad de una base de datos en vivo. Es seguro transaccional, ya que la base de datos generada es una instantánea coherente de la base de datos original. Sin embargo, si un apagado no planificado o un apagón interrumpen el comando, la base de datos generada podría dañarse.
La siguiente declaración usa el VACUUM INTO
comando para generar una nueva base de datos con el nombre de archivo chinook_backup.db
cuyos datos se copian del main
esquema del chinook
base de datos:
VACUUM main INTO 'c:\sqlite\db\chinook_backup.db';
Code language: JavaScript (javascript)
En este tutorial, ha aprendido por qué necesita usar SQLite VACUUM
comando y cómo ejecutarlo para optimizar la base de datos.