sqlitegt; VACUUM table_name;,,, ¿Qué hace este VACUUM?
la tabla o índice se desfragmentará. En SQLite 1.0, el comando VACUUM llama a gdbm_reorganize() para organizar los archivos de la base de datos backend.
SQLITE
En 2.0.0, el backend de GDBM fue eliminado y VACUUM no tiene ningún efecto. En 2.8.1, se reimplementó VACUUM. Los nombres de índices o de tablas ahora se ignoran.
Cuando se elimina un objeto (tabla, índice o activador) en la base de datos, queda un espacio vacío. Esto hará que la base de datos sea más grande de lo necesario, pero acelerará las inserciones. Las inserciones y eliminaciones en vivo pueden saturar la estructura de archivos de la base de datos y ralentizar el acceso al contenido de la base de datos.
El comando VACUUM copia los archivos de la base de datos principal a la base de datos temporal y recarga la base de datos principal desde la base de datos temporal para organizar los archivos de la base de datos. Esto eliminará las páginas en blanco, alineará los datos de la tabla uno al lado del otro y ordenará la estructura de archivos de la base de datos. No puede realizar las operaciones anteriores en otros archivos de bases de datos.
Este comando no tiene efecto si actualmente hay una transacción activa. Para bases de datos en memoria, este comando no tiene ningún efecto.
En SQLite 3.1, puede usar el modo de vacío automático en lugar del comando VACUUM. Utilice el pragma
auto_vacuum para activar el modo de vacío automático.
Usos de VACUUM: VACUUM
principal
Al realizar una operación VACUUM con los datos analizados en la Sección 3.4, se conserva la primera página.
Implementación de VACUUM:
Implementación de código (vcuum.c):
int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
////////////////////////////////// /// Paso 1 ///////// // ///////////////////////////////////////
zSql = sqlite3MPrintf("ATTACH 'q' AS vacuo_db;", zTemp);
//Crear base de datos temporal vacío_db
rc = execSql(db, zSql);
/// ////////////////////////////////// Paso 2////////// ////// ///////////////////////////////////
//Iniciar transacción p>
rc = execSql(db, "BEGIN EXCLUSIVE;");
////////////////// /////// ////////// Paso 3 /////////////////////////////// // ////// ///////////
//Crea todas las tablas, índices y vistas de la base de datos principal en vacío_db e inserta datos de todas las tablas, índices y vistas en la base de datos principal en vacío_db. Es decir, cree un espejo de la base de datos primaria en vacío_db.
rc = execExecSql(db,
"SELECT 'CREAR TABLA vacío_db.'".|| substr(sql, 14, 100000000)"
" FROM sqlite_master DONDE tipo='table ' AND nombre!='sqlite_sequence'");
if ( rc!=SQLITE_OK ) ir a end_of_vacuum;
rc = execExecSql(db,
"SELECCIONE 'CREAR ÍNDICE vacío_db.|| substr(sql, 14, 100000000)"
" DESDE sqlite_master DONDE sql COMO 'CREAR ÍNDICE ' ");
if (rc!=SQLITE_OK) ir a end_of_vacuum;
rc = execExecSql(db,
"SELECCIONAR 'CREAR ÍNDICE ÚNICO vacío_db.|| substr(sql, 21, 100000000)" p>
" DESDE sqlite_master DONDE sql COMO 'CREAR ÍNDICE ÚNICO '");
if( rc!=SQLITE_OK ) ir a end_of_vacuum
rc = execExecSql(db,
"SELECCIONAR 'CREAR VISTA vacío_db'". || substr(sql, 13, 100000000)"
" DESDE sqlite_master DONDE tipo='vista'"
rc = execExecSql(db,
"SELECT 'INSERT INTO vacuo_db.| cita(nombre) "
"|| ' SELECCIONAR * DESDE '); || cita(nombre) | ';'"
"DESDE sqlite_master "
"DONDE tipo = 'tabla' Y nombre!=' sqlite_sequence';"
);
///////////////////////////////////// Paso 4 / /////////////////////////////////////////////////// p>