Dokumentasi Oracle memiliki serangkaian pertimbangan yang sangat baik untuk pilihan pengindeksan:http://download.Oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004
Pembaruan untuk 19c:https://docs.Oracle.com/en/database/Oracle/Oracle-database/19/tgdba/designing-and-developing-for-performance.html#GUID-99A7FD1B-CEFD-4E91-9486- 2CBBFC2B7A1D
Mengutip:
-
Pertimbangkan untuk mengindeks kunci yang sering digunakan dalam klausa WHERE.
-
Pertimbangkan kunci pengindeksan yang sering digunakan untuk menggabungkan tabel dalam pernyataan SQL. Untuk informasi selengkapnya tentang mengoptimalkan gabungan, lihat bagian "Menggunakan Hash Cluster untuk Performa".
-
Pilih kunci indeks yang memiliki selektivitas tinggi. Selektivitas indeks adalah persentase baris dalam tabel yang memiliki nilai yang sama untuk kunci yang diindeks. Selektivitas indeks optimal jika beberapa baris memiliki nilai yang sama. Catatan:Oracle secara otomatis membuat indeks, atau menggunakan indeks yang ada, pada kunci dan ekspresi kunci unik dan utama yang Anda tentukan dengan batasan integritas. Pengindeksan kolom selektivitas rendah dapat membantu jika distribusi data miring sehingga satu atau dua nilai muncul banyak lebih jarang daripada nilai lainnya.
-
Jangan gunakan indeks B-tree standar pada kunci atau ekspresi dengan sedikit nilai yang berbeda. Kunci atau ekspresi tersebut biasanya memiliki selektivitas yang buruk dan oleh karena itu tidak mengoptimalkan kinerja kecuali nilai kunci yang sering dipilih muncul lebih jarang daripada nilai kunci lainnya. Anda dapat menggunakan indeks bitmap secara efektif dalam kasus seperti itu, kecuali jika indeks sering diubah, seperti dalam aplikasi OLTP konkurensi tinggi.
-
Jangan indeks kolom yang sering diubah. UPDATE pernyataan yang mengubah kolom terindeks dan pernyataan INSERT dan DELETE yang mengubah tabel berindeks memakan waktu lebih lama daripada jika tidak ada indeks. Pernyataan SQL tersebut harus mengubah data dalam indeks serta data dalam tabel. Mereka juga menghasilkan undo dan redo tambahan.
-
Jangan indeks kunci yang hanya muncul di klausa WHERE dengan fungsi atau operator. Klausa WHERE yang menggunakan fungsi, selain MIN atau MAX, atau operator dengan kunci yang diindeks tidak menyediakan jalur akses yang menggunakan indeks kecuali dengan indeks berbasis fungsi.
-
Pertimbangkan pengindeksan kunci asing batasan integritas referensial dalam kasus di mana sejumlah besar pernyataan INSERT, UPDATE, dan DELETE secara bersamaan mengakses tabel induk dan anak. Indeks semacam itu memungkinkan UPDATE dan DELETE pada tabel induk tanpa berbagi mengunci tabel anak.
-
Saat memilih untuk mengindeks kunci, pertimbangkan apakah peningkatan kinerja untuk kueri sebanding dengan kerugian kinerja untuk INSERT, UPDATE, dan DELETE dan penggunaan ruang yang diperlukan untuk menyimpan indeks. Anda mungkin ingin bereksperimen dengan membandingkan waktu pemrosesan pernyataan SQL dengan dan tanpa indeks. Anda dapat mengukur waktu pemrosesan dengan fasilitas pelacakan SQL.