Оптимизаторът смята, че пълното сканиране на таблицата ще бъде по-добро.
Ако има само няколко NULL редове, оптимизаторът е прав.
Ако сте абсолютно сигурни, че достъпът до индекса ще бъде по-бърз (тоест имате повече от 75% редове с col1 IS NULL ), след което подскажете вашата заявка:
SELECT /*+ INDEX (t index_name_on_col1) */
*
FROM mytable t
WHERE col1 IS NOT NULL
Защо 75% ?
Тъй като се използва INDEX SCAN за извличане на стойности, които не са обхванати от индекса, предполага скрито присъединяване към ROWID , което струва около 4 пъти повече от сканирането на таблицата.
Ако диапазонът на индекса включва повече от 25% от редове, сканирането на таблицата обикновено е по-бързо.
Както бе споменато от Tony Andrews , факторът на групиране е по-точен метод за измерване на тази стойност, но 25% все още е добро правило.