Index Skip Skan – czyli o przeglądach z podziałem indeksu

oceń
Jolanta Mieszczyk napisał/a o
4 lata temu

Posted: Krzysztof Czajkowski

Tytuł: Index Skip Skan - czyli o przeglądach z podziałem indeksu

W bazach Oracle często stosuje się indeksy wielokolumnowe. Mają one istotne zalety ale powstaje pytanie, w jakiej kolejności ustawić kolumny klucza indeksu. Zasada mówi, że pierwszą kolumną powinna być ta, po której wyszukujemy dane najczęściej, jeżeli szukamy po jednej z nich. Niby proste, ale co w przypadku, gdy wyszukujemy tylko po jednej kolumnie ale nie jest ona pierwsza w indeksie wielokolumnowym?


Rozważmy następujący przypadek: na tabeli EMP (pracownicy) istnieje indeks złożony na kolumnach DEPTNO (numer departamentu) i JOB (stanowisko pracy):


CREATE INDEX emp_large _ idx ON emp_large (deptno, job);


Oczywistym jest, że jeżeli wyszukiwać będziemy po obu kolumnach, a statystyki podpowiedzą optymalizatorowi, że użycie indeksu się opłaca, to plan wykonania będzie wyglądał jak poniżej (RANGE SCAN wynika z nieunikalności wartości):


SELECT * FROM emp_large WHERE deptno=10 AND job='ADMIN';



Podobnie, jeżeli użyjemy w zapytaniu w klauzuli WHERE tylko kolumny DEPTNO.
Co jednak w przypadku, gdy wykorzystamy tylko filtrowanie po kolumnie JOB? Kolumna ta jest drugą w kluczu indeksu. Indeks jest posortowany ale w pierwszej kolejności po DEPTNO, dopiero w drugiej po JOB, co powoduje, że poszczególne wartości JOB są rozproszone po tabeli. Okazuje się jednak, że Oracle na szczęście szacuje opłacalność weryfikacji wartości w całym indeksie i może zdecydować się na jego użycie.


SELECT * FROM emp_large WHERE job='ADMIN';



Jak widać w planie wykonania zapytania, wykonana została operacja SKIP SCAN na indeksie. Oracle wykonuje następującą operację: indeks złożony jest dzielony na mniejsze części (logical subindexes) - ich liczba jest uzależniona od liczby różnych wartości w kolumnie początkowej. Poszczególne części przeglądane są niezależnie a po dojściu do poszukiwanych wartości pozostała część danej części jest pomijana. Jeżeli indeks złożony posiada niewiele różnych wartości we wiodących kolumnach i wiele różnych wartości w pozostałych kolumnach, cały mechanizm może działać sprawnie i z korzyścią dla czasu realizacji operacji wyszukiwania.


Podsumowując: Oracle ma na tyle sprytne mechanizmy działa zaszyte w optymalizatorze, że potrafi znaleźć korzystne rozwiązanie nawet w sytuacjach w których moglibyśmy się tego nie spodziewać.

Zaproszenie na szkolenie z tego zakresu: Podstawy Hurtowni Danych w środowisku Oracle
Na szkoleniu uczestnik zdobędzie wiedzę na temat zasad działania serwera Oracle ze szczególnym uwzględnieniem tych aspektów, które mają wpływ na wydajność funkcjonowania środowiska. Kluczową wiedzą wyniesioną ze szkolenia będzie świadomość różnorodnych aspektów projektu i implementacji baz danych związanych z szybkością realizacji operacji, wielodostępem do bazy danych oraz jej niezawodnością. Wiedza obejmuje zrozumienie organizacji struktur przechowywania danych, struktur pomocniczych, ze szczególnym uwzględnieniem indeksów, gromadzenia i wykorzystania statystyk oraz pracy optymalizatora. Umiejętności zdobyte w ramach szkolenia to przede wszystkim pozyskiwanie planów wykonania zapytań i ich interpretacja, gromadzenie statystyk, ich weryfikacja i przenoszenie. Bardzo ważną umiejętnością jest tworzenie i edycja właściwie dobranych struktur indeksujących i ich przebudowa. Umiejętności obejmują również wykorzystanie wskazówek optymalizatora do wpływania na plany wykonania zapytań.

Masz pytanie?

zadaj pytanie

Masz pomysł?

zgłoś pomysł