2011-06-01 20 views
15

Como lo que experimento con Sqlite para mis pequeñas aplicaciones siempre uso sqliteadmin para usar su base de datos limpieza función para eliminar datos innecesarios en mi base de datos.¿Cuál es el método para limpiar bases de datos en SQlite?

Ahora quiero crear un método en mi aplicación que haga lo mismo que sqliteadmin CleanUp.

¿Cómo hacer esto?

Gracias en lo que respecta

Respuesta

14

Parece que estás en busca de la declaración VACUUM.

31
using (SQLiteCommand command = m_connection.CreateCommand()) 
{ 
    command.CommandText = "vacuum;"; 
    command.ExecuteNonQuery(); 
} 

aquí está la respuesta exacta sobre cómo ejecutar el vacío.

2

Script de publicación interesante. La instrucción Vacuum en SQLite copia toda la base de datos en un archivo temporal para la reconstrucción. Si planea hacer esto "On Demand" a través de un usuario o algún proceso, puede tomar una cantidad considerable de espacio en disco y tiempo para completar una vez que su base de datos supera los 100 MB, especialmente si está mirando varios GB. En ese caso, es mejor utilizar la declaración AUTO_VACUUM = pragma verdadero al crear la base de datos, y simplemente eliminar registros en lugar de ejecutar el VACÍO. Hasta ahora, esta es la única ventaja que puedo encontrar que SQL Server Compact tiene sobre SQLite. On demand SHRINK de la base de datos Sql Server Compact es extremadamente rápido en comparación con el vacío de SQLite.

+0

No he tenido tiempo de probarlo, pero este pragma se ve bien. Sin embargo, dado que este no es el valor predeterminado, se debe observar el comportamiento exacto aquí: http://www.sqlite.org/pragma.html#pragma_auto_vacuum – tmighty

+1

Además, los argumentos pueden no ser simplemente "verdaderos" o "falsos", sino más bien "0,1,2, NINGUNO, LLENO, INCREMENTAL". – tmighty

Cuestiones relacionadas