Częściowe indeksowanie, a więc szybciej - ale niedrogo.

1 pkt
Jolanta Mieszczyk napisał/a o
5 lat temu

Posted: Krzysztof Czajkowski

Tytuł: Częściowe indeksowanie, a więc szybciej - ale niedrogo.

Serwer Oracle oferuje duże możliwości z zakresu indeksowania danych. Indeksy stanowią nieodłączny element każdej bazy, a przyspieszenie (m.in. wyszukiwania) dzięki ich stosowaniu jest często kluczowe. Nic jednak za darmo - indeksy kosztują: aktualizacja przy operacjach DML na tabeli, miejsce na dysku i w RAM, czas budowy i przebudowy.
Niektóre systemy baz danych (np. PostgreSQL) oferują prosty sposób na utworzenie indeksu częściowego, tj. takiego, który jest oparty tylko o wybrane wartości zadanej kolumny. Taki indeks jest mniejszy, a jeśli zależy nam na szybkim wyszukiwaniu najczęściej pewnych wartości, to taki indeks, jako mniejszy, może okazać się bardzo pożądany. Niestety w Oracle nie zadziała składnia z PostgreSQL, np.:

Taki zapis nie jest dopuszczalny - "02158. 00000 - "invalid CREATE INDEX option""
Oracle 12c wprowadził nową funkcjonalność w tym zakresie. Otóż stosując partycjonowanie tabeli (czyli podział tabeli na części, a dokładnie tworzenie wielu segmentów danych dla jednej tabeli) możliwe jest indeksowanie tylko wybranych jej fragmentów. Dzięki temu można indeksować tylko te części tabeli, które są częściej przeszukiwane lub nie indeksować tych, które podlegają dużej liczbie operacji modyfikacji danych (DML).

Jak widać na powyższym przykładzie, składnia instrukcji tworzącej tabelę z partycjami została rozszerzona o atrybut INDEXING ON | OFF. Domyślną wartością jest INDEXING ON.
Podczas tworzenia indeksu instrukcją CREATE INDEX nie będzie brana pod uwagę wartość atrybutu w definicji tabeli. Aby atrybut został uwzględniony należy przy tworzeniu indeksu klauzulę INDEXING PARTIAL (domyślnym ustawienie jest INDEXING FULL):


Ograniczeniami dla powyższego rozwiązania są:
- konieczność partycjonowania tabeli. To bardzo istotne ograniczenie, ponieważ partycjonowanie danych (wbudowane w system) jest dostępne tylko w wersji Enterprise Edition (najdroższej) i na dodatek jest to opcja osobno płatna.
- indeks częściowy nie może być unikalny. Jednak to ograniczenie jest naturalne - nie sposób zagwarantować (w wydajny sposób) unikalności danych bez ich indeksowania.


Podsumowując: Oracle w wersji 12c dostarczył niejedną nową i ciekawą funkcjonalność. Niestety akurat ta opisana powyżej nie jest dostępne dla każdego - warunkuje to koszt wymaganej licencji.

Zaproszenie na szkolenie z tego zakresu: Podstawy Hurtowni Danych w środowisku Oracle

Masz pytanie?

zadaj pytanie

Masz pomysł?

zgłoś pomysł