Przeszukiwanie danych pełnotekstowych – indeks Oracle Text typu CTXSYS.CONTEXT

Dość powszechnym wyzwaniem dla programistów jest umożliwienie użytkownikom bazy danych efektywnego wyszukiwania informacji w oparciu o częściowe dopasowanie danych tekstowych, np. szukanie produktów zawierających określone słowo w opisie, szukanie symboli produktów zawierających określony fragment, szukanie dokumentów tekstowych zawierających podaną frazę, itp. Zwykle zadania takie są realizowane za pomocą operatora LIKE ‚%…%’ lub UPPER(…) LIKE ‚%…%’.[…]

Wpływ Clustering Factor na wydajność zapytań zakresowych z indeksem

W tabelach typu Heap (najpopularniejsze, domyślne) kolejność fizycznego ułożenia rekordów jest zasadniczo przypadkowa, wynikająca m.in. z porządku ich wstawiania. Kolejność ta nie ma żadnego znaczenia dla wydajności zapytań dokonujących pełnego odczytu tabeli lub jednorekordowych zapytań punktowych z użyciem indeksu. Ma jednak znaczenie dla wydajności realizacji zapytań zakresowych z użyciem indeksu, gdzie wynikowy zbiór rekordów tabeli[…]

Indeksy częściowe w Oracle Database 12c

Oracle Database 12c oferuje ciekawe rozwiązanie, pozwalające zredukować rozmiar indeksu tworzonego na tabeli partycjonowanej, w której wiele partycji ma charakter archiwalny (bardzo rzadko podlega zapytaniom). Indeks częściowy – bo o nim mowa – może obejmować swoim zasięgiem wybrane partycje tabeli, podczas gdy rekordy w pozostałych partycjach tabeli pozostają bez indeksu. Gdy realizowane jest zapytanie do[…]

Kilka indeksów na tej samej kolumnie (wyrażeniu) ?!

W przeszłości wielokrotnie podejmowałem dyskusje dotyczące właściwego doboru typu indeksu w zależności od charakterystyki danych i od rodzaju wykonywanych zapytań. Wydawało się, że jednym z niespełnionych marzeń programistów było utworzenie wielu alternatywnych indeksów na tej samej kolumnie (np. bitmapowy, b-drzewo, partycjonowany lokalnie, partycjonowany globalnie,…) tak, aby to optymalizator zapytań (a nie programista) wybrał sobie ten,[…]

Oracle Database – indeks B*-drzewo a operator LIKE

Czy indeks B*-drzewo może być użyty do wyszukiwania opartego na predykacie LIKE? To zależy. Przyjrzyjmy się planom wykonania dwóch zapytań do przykładowej tabeli DUZA_TEKSTOWA (16 tysięcy rekordów, niepowtarzalne wartości w kolumnie tekstowej A). SQL> create index demo_idx1 on duza_tekstowa(a); … SQL> select * from duza_tekstowa where a like ‚abcd%’; … Plan wykonywania —————————————————————– | Id[…]

Indeks B*-drzewo a wyszukiwanie wartości NULL

Nie każdy programista pamięta, że struktura indeksu B*-drzewo pomija wartości NULL, czego efektem jest odmowa użycia takiego indeksu do realizacji predykatu IS NULL. Łatwo zaobserwować takie zjawisko wykonując prosty eksperyment. Poniższa tabela DUZA_Z_NULLAMI(A,B) zawiera pół miliona rekordów, wśród których jeden rekord posiada wartość NULL w kolumnie A. Na kolumnie tej utworzony został indeks DEMO_IDX1. Obejrzyjmy[…]