2010-11-11

Przebudowa indeksów Firebird

W trakcie dodawania nowych danych oraz modyfikowania istniejących danych w bazie danych, wewnętrzne struktury służące do przechowywania indeksów, mogą nie być zbudowane w sposób optymalny. Aby zapewnić optymalny dostęp do danych, należy od czasu do czasu przebudować indeksy.

Jednym ze sposobów na przebudowę indeksów jest wykonanie kopii bezpieczeństwa bazy danych (backup), a następnie odbudowanie całej bazy na podstawie tej kopii (recreate). W przypadku wielkich baz danych takie postępowanie może być nie do przyjęcia — głównie z powodu długiego czasu potrzebnego na odbudowanie bazy danych.

Na szczęście nie trzeba odtwarzać bazy danych, aby przebudować indeksy. Wystarczy dezaktywować indeksy poleceniem ALTER INDEX xxxxx INACTIVE, a następnie ponownie je aktywować poleceniem ALTER INDEX xxxxx ACTIVE.

Niestety, powyższy sposób nie umożliwia przebudowania indeksów kluczy głównych (PRIMARY KEY) oraz indeksów dla kluczy obcych (FOREIGN KEY). Takich indeksów nie można dezaktywować. W Firebird jest na to sposób: można wykonać polecenie ALTER INDEX xxxxx ACTIVE bez uprzedniego dezaktywowania indeksu. Mimo, że aktywowanie aktywnego indeksu może wydawać się dziwne, serwer Firebird w takim przypadku również przebuduje indeks. Można tę cechę Firebird wykorzystać do przebudowy wszystkich indeksów, również indeksów kluczy głównych i kluczy obcych.

Listę wszystkich indeksów z bazy danych można uzyskać wykonując polecenie:
SELECT
   'ALTER INDEX '
   || Trim(RDB$INDEX_NAME)
   || ' ACTIVE;'
 FROM
   RDB$INDICES
 WHERE
   RDB$RELATION_NAME NOT STARTING WITH 'RDB$';

Brak komentarzy:

Prześlij komentarz