A tak dokładnie aby zadziałał, gdy chcemy zrobić zapytanie: select * from tablica where kolumna is null; Zakładamy wtedy indeks funkcyjny: create index kolumna_idx on tablica (NVL(kolumna,TO_DATE(‘ 4000-01-01’, ‘syyyy-mm-dd’))) I wtedy musimy tak konstruować zapytanie, aby mogło wykorzystać powyższy indeks: select * from tablica where NVL(kolumna,TO_DATE(‘4000-01-01’, ‘syyyy-mm-dd’)) = TO_DATE(‘4000-01-01’, ‘syyyy-mm-dd’) Dla porównania koszt tradycyjnego zapytania: select count(*) from dh_monitor.events where valid_to is null to
8122 dla porównania, zapytanie które wykorzystuje indeks ma koszt 3!!! select count(*) from events where NVL(VALID_TO,TO_DATE(‘4000-01-01 ‘, ‘syyyy-mm-dd’)) = TO_DATE(‘4000-01-01’, ‘syyyy-mm-dd’) Dla tabeli, gdzie stosunek ilości nullowych wierszy do wszystkich w tabeli wynosi: 6.568/5.999.617