Red de conocimiento informático - Problemas con los teléfonos móviles - sqlitegt; VACUUM table_name;,,, ¿Qué hace este VACUUM?

sqlitegt; VACUUM table_name;,,, ¿Qué hace este VACUUM?

El comando VACUUM es una extensión de SQLite que imita el mismo comando en PostgreSQL. Si se llama a VACUUM con un nombre de tabla o índice,

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

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)"

" 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>