De optimizer denkt dat de volledige tabelscan beter zal zijn.
Als er maar een paar NULL . zijn rijen, de optimizer heeft gelijk.
Als u er absoluut zeker van bent dat de toegang tot de index sneller zal zijn (dat wil zeggen, u heeft meer dan 75% rijen met col1 IS NULL ), hint dan op uw vraag:
SELECT /*+ INDEX (t index_name_on_col1) */
*
FROM mytable t
WHERE col1 IS NOT NULL
Waarom 75% ?
Omdat het gebruik van INDEX SCAN om waarden op te halen die niet door de index worden gedekt, impliceert een verborgen join op ROWID , die ongeveer 4 kost keer zoveel als tafelscannen.
Als het indexbereik meer dan 25% omvat van rijen is de tabelscan meestal sneller.
Zoals vermeld door Tony Andrews , clusterfactor is een nauwkeurigere methode om deze waarde te meten, maar 25% is nog steeds een goede vuistregel.