O indeksach – początek dłuższej historii

Chciałbym w najbliższych tygodniach przygotować obszerny wpis dotyczący indeksów w Oracle. Założeniem jest uporządkowanie tego tematu i przygotowanie przykładów, które w jasny sposób pokażą jakie są atuty i wady stosowania indeksów. Na początek kilka słów wstępu jaka jest koncepcja indeksów w ORACLE, co będzie punktem wyjścia do kolejnych wpisów dotyczące już konkretnych zagadnień związanych z indeksami.

Czym są indeksy na bazie danych ORACLE?

– Indeksy są opcjonalnymi obiektami bazy danych zdefiniowanymi w tabeli i co najmniej jednej kolumnie.

– Indeks B-drzewa jest domyślnym typem indeksu w Oracle.

– Indeksy są używane przede wszystkim do poprawy wydajności zapytań, ale są również wykorzystywane do wymuszania kluczy podstawowych / unikalnych i pomagają w zapobieganiu niektórym scenariuszom blokującym tabelę.

– Indeksy zużywają zasoby (dysk, procesor, pamięć). Zbyt wiele indeksów w tabeli znacznie spowalnia działanie instrukcji INSERT, UPDATE i DELETE.

– Bez indeksu w miejscu, Oracle musi sprawdzić każdy wiersz w tabeli (skanowanie pełnej tabeli – FULL SCAN), aby określić, czy wiersz jest kandydatem do zwrotu do zapytania.

– Unikalna wartość kolumny w porównaniu do wszystkich innych wierszy w tabeli (wysoka liczność) jest idealną sytuacją do bardzo wydajnego indeksu B-drzewa. W tej sytuacji osiąga się doskonałą wydajność, nawet jeśli tabele zawierają miliony wierszy.

– W niektórych sytuacjach Oracle może pobierać dane dla zapytania, uzyskując tylko dostęp do indeksu (indeksu pokrycia); tabela nie musi być dostępna.

– W niektórych scenariuszach optymalizator zapytań nie korzysta z indeksu. Innymi słowy, optymalizator zapytań oblicza, że ​​koszt pełnego skanowania tabeli jest mniejszy niż koszt podczas korzystania z indeksu.

Written by Przemysław Starosta