Pengoptimal berpikir bahwa pemindaian tabel lengkap akan lebih baik.
Jika hanya ada beberapa NULL
baris, pengoptimalnya benar.
Jika Anda benar-benar yakin bahwa akses indeks akan lebih cepat (yaitu, Anda memiliki lebih dari 75%
baris dengan col1 IS NULL
), lalu beri petunjuk kueri Anda:
SELECT /*+ INDEX (t index_name_on_col1) */
*
FROM mytable t
WHERE col1 IS NOT NULL
Mengapa 75%
?
Karena menggunakan INDEX SCAN
untuk mengambil nilai yang tidak tercakup oleh indeks menyiratkan gabungan tersembunyi di ROWID
, yang harganya sekitar 4
kali lebih banyak daripada pemindaian tabel.
Jika rentang indeks mencakup lebih dari 25%
baris, pemindaian tabel biasanya lebih cepat.
Seperti yang disebutkan oleh Tony Andrews
, faktor pengelompokan adalah metode yang lebih akurat untuk mengukur nilai ini, tetapi 25%
masih merupakan aturan praktis yang baik.