2010-03-30 14 views
14

Mam bazę danych SQLite.Dlaczego czyszczenie bazy danych SQLite nie zmniejsza jej rozmiaru?

Stworzyłem tabele i wypełniłem je znaczną ilością danych.

Następnie wyczyściłem bazę danych, usuwając i ponownie odtwarzając tabele. Potwierdziłem, że wszystkie dane zostały usunięte, a tabele były puste, patrząc na nie za pomocą administratora SQLite.

Problem polega na tym, że rozmiar pliku bazy danych (* .db3) pozostał niezmieniony po usunięciu.

Nie jest to oczywiście pożądane, ponieważ chciałbym odzyskać przestrzeń, która została zajęta przez dane, gdy je wyczyści.

Czy ktoś zrobił podobną obserwację i/lub wiedział, co się dzieje?

Co można z tym zrobić?

+1

'transakcyjnych koniec; próżnia; ' – PHPst

Odpowiedz

24

Od here:

Gdy obiekt (tabela, indeks, spust, lub widoku) jest usunięty z bazy zostawia pustej przestrzeni. To puste miejsce zostanie ponownie wykorzystane po następnym dodaniu nowych informacji do bazy danych. Ale w międzyczasie plik bazy danych może być większy niż niezbędny. Ponadto częste wstawianie, aktualizowanie i usuwanie może powodować fragmentację informacji w bazie danych - usuwać je w całym pliku bazy danych, a nie kumulować razem w jednym miejscu.

Polecenie czyści główną bazę danych, kopiując jej zawartość do pliku tymczasowej bazy danych i ponownie wczytując oryginalny plik bazy danych z kopii. Eliminuje to wolne strony, wyrównuje dane tabeli do ciągłości i w inny sposób czyści strukturę plików bazy danych.

3

Wielkości baz danych działają jak znaki wodne, np. jeśli woda unosi znak wody idzie w górę, gdy woda receeds znak wodny pozostaje tam, gdzie to było

Należy spojrzeć na kurczące baz

Powiązane problemy