La sentencia VACUUM reconstruye la base de datos completa. Hay varias razones por las que una aplicación puede hacer esto:
VACUUM sólo funciona en la base de datos principal. No es posible usar VACUUM en un fichero de base de datos añadida.
La sentencia VACUUM funciona mediente el copiado del contenido de la base de datos en un fichero de base de datos temporal y después se sobrescribe el original con el contenido del fichero temporal. Cuando se sobrescribe el original, se usa un diario de reversión o de escritura anticipada de registro de archivo WAL tal y como sería para cualquier transacción de base de datos. Esto significa que cuando se usa VACUUM con una base de datos, se requiere al menos el doble del tamaño del fichero de base de datos original en espacio de disco libre.
La sentencia VACUUM puede cambiar los ROWID de las entradas den cualquier tabla que no tenga una INTEGER PRIMARY KEY explícito.
Un VACUUM fallará si hay una transacción abierta, o si hay una o mas sentencias SQL activas cuando se ejecuta.
A partir de la versión 3.1 de SQLite, una alternativa al uso de la sentencia VACUUM para recuperar espacio después de haber borrado datos es el modo auto-vacuum, activado usando el pragma auto_vacuum. Cuando auto_vacuum está activo para una base de datos la liberación de páginas puede ser reclamada después de borrar datos, haciendo que el fichero se reduzca de tamaño, sin recontruir toda la base de datos usando VACUUM. Sin embargo, el uso de auto_vacuum puede provocar una fragmentación extra del fichero de base de datos. Y auto_vacuum no compacta las páginas llenadas parcialmente de la base de datos, como hace VACUUM.
© Diciembre de 2011, Salvador Pozo Coronado, salvador@conclase.net