Optymalizacja SQLite

Zbiór porad oraz wskazówek tyczących się wydajności i optymalizacji szybkości działania baz SQLite.

SQLite może być naprawdę szybką i stabilną bazą danych. Klucz do wydajności leży w ograniczeniu i optymalizowaniu operacji odczytu/zapisu na dysku. Podstawowe elementy optymalizacji SQLite to:
- Używanie bazy działającej w pamięci
- Używanie tranzakcji (BEGIN TRANSACTION i END TRANSACTION)
- Używanie indeksów
- Używanie Use PRAGMA cache_size i PRAGMA synchronous=OFF
- Porządkowanie bazy danych
- Używanie PRAGMA count_changes=OFF

PRAGMA

Wartość cache_size określa maksymalną ilość stron btree jaką SQLite będzie trzymało na raz w pamięci w danym czasie. Rozmiar cache_size nie jest alokowany jeżeli nie jest potrzebny, tak więc można zwiększyć wartość cache_size bez marnotrawienia zasobów serwera. Jako że jest to wartość konfigurowalna w czasie pracy bazy można dowolnie manipulować wartością ustawiając optymalną wartość dla określonych zapytań.

PRAGMA synchronous=OFF spowoduje że SQLite nie będzie czekało aż operacje na dysku zostaną wykonane. Po prostu zleci ich wykonanie i będzie dalej kontynuować swoje operacje. Może to znacząco zwiększyć szybkość SQLite.

Gdy PRAGMA count_changes jest włączone (ON) sqlite zlicza rekordy zmodyfikowane przez operacje DELETE/INSERT/UPDATE. Jeżeli nie potrzebne są ci te dane możesz wyłączyć zliczanie wierszy co nieznacznie przyśpieszyć wykonywanie wyżej wymienionych operacji. Ta opcja może zostać usunięta z przyszłych wydać SQLite.

PRAGMA temp_store określa sposób przechowywania tymczasowych plików. Możliwe są trzy ustawienia: DEFAULT (0), FILE (1), i MEMORY (2). Użycie pamięci (2) dla tymczasowych plików może znacząco przyśpieszyć wykonywanie operacji.

Transakcje

Każda operacja na bazie wymusza rozpoczęcie i zakończenie transakcji dla niej co jest czasochłonną operacją. Można tego łatwo uniknąć grupując szereg zapytań w transakcje korzystając z poleceń BEGIN TRANSACTION; i END TRANSACTION;.

Indeksy

Indeksy utrzymują kolejność sortowania kolumny lub zbioru kolumn. To umożliwia pobranie zbioru wartości bez skanowania całej tabeli co znacznie przyśpiesza operacje. SQLite automatycznie tworzy indeksy dla każdej unikalnej (UNIQUE) tabeli (w tym PRIMARY KEY). By utworzyć indeksy na innych kolumnach należy skorzystać z polecenia CREATE INDEX. Dodawanie danych do tablicy z indeksami jest nieco wolniejsze niż dodawanie do tabeli bez indeksów.

Porządkowanie bazy danych

Dodawanie rekordów, ich usuwanie, modyfikowanie itp. powoduje fragmentację bazy danych. W celu jej optymalizacji należy wykonać polecenie:
VACUUM;
blog comments powered by Disqus

Kategorie

Strony