Oracle virtual index – strojenie bazy danych

Natrafiłem dziś na fajną zabawkę w Oracle – przyda się z pewnością każdemu, kto właśnie optymalizuje swoją bazę – powiedzmy – dużą bazę. Optymalizacja długich zapytań, to w dużej mierze sztuka dobrania najodpowiedniejszego zestawu indeksów dla odpytywanej tabeli. W przypadku baz danych o stosunkowo niewielkiej ilości danych, sukces zależy jedynie od cierpliwości i wiedzy o mechanizmach bazodanowych. Nieco bardziej skomplikowane jest strojenie bazy, kiedy objętość jej tabel zaczynamy mierzyć w Giga albo nawet Terabajtach . Tam nie zawsze możemy pozwolić sobie na przeprowadzenie wielu eksperymentów, choćby z powodu ograniczonej przestrzeni dyskowej, przeznaczonej na indeksy.

Jeśli zastanawiasz się nad założeniem jakiegoś indeksu, musisz ideę tą odłożyć czasem na bok i skonfrontować się z rzeczywistoscią. Na dużych tabelach zakładanie indeksu będzie trwało długo. Tak kawę, papierosa, przerwe na lunch i jeszcze trochę. Przez to przetestowanie różnych kombinacji zajmie nam zbyt dużo czasu (a po godzinach nikt nie lubi pracować, prawda?). Możemy założyć wirtualny indeks na kolumnie, tylko po to by sprawdzić jak zachowa się optymalizator kosztowy mając taki indeks. W rzeczywistości „prawdziwy” indeks nie będzie nakładany.

create unique index moj_index_1 on moja_tabelka(kolumna) nosegment;

żeby to zadziałało musimy jeszcze włączyć dla sesji opcję, umożliwiającą korzystanie z indeksów niesegmentowanych (przy ponownym połączeniu to już nie będzie działało, ale umówmy się – o to właśnie chodzi):

alter session set "_use_nosegment_indexes"=true;

Tego indeksu nie będziecie widzieli w user_indexes jak pozostałe, normalne, indeksy, za to zobaczycie go w slowniku USER_OBJECTS.

Leave a comment