2010-01-27 11 views
41

Sto lavorando con il file sqlite3.modifica la dimensione del file sqlite dopo "DELETE FROM table"

In primo luogo, ho inserito un database relativamente grande, la dimensione del file era di circa 100 mb.

Che ho fatto

$db->exec("DELETE FROM table"); 

ed entrato solo una piccola parte di quel database. Ma la dimensione del file è rimasta a 100 mb.

Cosa si deve fare per modificare la dimensione del file sqlite quando si elimina il contenuto?

risposta

71

Il comando che stai cercando è vacuum. C'è anche un pragma per attivare l'auto-aspirazione.

Dalla documentazione:

Quando un oggetto (tabella, indice, grilletto, o vista) viene eliminato dal database, lascia dietro di spazio vuoto. Questo spazio vuoto verrà riutilizzato alla successiva ora nuove informazioni aggiunte al database . Ma nel frattempo, il file di database potrebbe essere più grande di strettamente necessario. Inoltre, gli inserimenti, gli aggiornamenti e le eliminazioni frequenti possono causare la frammentazione delle informazioni nel database - sparse in tutto il file di database anziché piuttosto che raggruppate in un unico punto.

Il comando VACUUM pulisce la principale banca dati copiando il suo contenuto in un file di database temporaneo e ricaricare il file di database originale dalla copia . Ciò elimina le pagine libere, allinea i dati della tabella in modo contiguo, e in altro modo pulisce la struttura del file del database .

+0

c'è un modo per ripristinare le righe della tabella eliminate non ancora cancellate? – Blauhirn

-2

Pulizia dei database SQLite ha due comandi progettati per la pulizia reindex e vuoto. reindex è usato per ricostruire gli indici. Ha due forme: reindex nome_colla; reindex nome_tabella | nome_indice;

12

È possibile farlo

$db->exec("DELETE FROM table"); 
$db->exec("vacuum"); 

e la dimensione del file sarà cambiato.

Problemi correlati