Bagaimana indeks memengaruhi kinerja kueri?

12

Jelas menjaga beberapa indeks berbeda memiliki dampak negatif pada menyisipkan dan menghapus kinerja. Bagaimana dengan kinerja kueri: Apakah masuk akal sama sekali menyimpan terlalu banyak indeks di atas meja? Apakah kinerja kueri akan meningkat dalam hal apa pun dengan indeks yang ditambahkan (tentu saja untuk kueri yang menggunakan indeks sama sekali) atau apakah bahkan mungkin kinerja kueri akan menurun dengan terlalu banyak indeks karena itu perlu untuk berkonsultasi dengan semua indeks untuk mendapatkan indeks hasil?

Jika ada indeks yang berbeda pada tabel: apakah semuanya akan dipertimbangkan, atau hanya yang terbaik dari sudut pandang pengoptimal? Apakah Oracle menerapkan indeks multi-dimensi?

paweloque
sumber
2
mengapa Anda tidak menguji ini, dan melaporkan kembali dengan hasil Anda? :)
Neil McGuigan
Saya akan lakukan besok :)
paweloque
2
Indeks tidak selalu memperlambat penghapusan, mereka juga dapat mempercepatnya (seperti halnya pembaruan dapat memanfaatkan indeks)
a_horse_with_no_name
@el chief, apa gunanya menciptakan kembali kemudi? jadi ya efek kinerja permintaan dipertanyakan meskipun kami tahu pasti bahwa memasukkan / menghapus akan terpengaruh. Bagaimana dengan pembaruan? apakah mereka akan terpengaruh secara negatif?
Sangram

Jawaban:

15

Akan memakan waktu lebih lama untuk menghasilkan rencana ketika ada lebih banyak indeks untuk dipertimbangkan, tetapi saya ragu perbedaannya akan signifikan secara terukur. The alasan untuk menjatuhkan indeks tidak mencantumkan kinerja query. Di sisi lain, secara umum Anda tidak boleh membuat indeks kecuali Anda tahu mereka akan digunakan untuk membuat kueri lebih efisien.

Dari Oracle Concepts Guide , berikut adalah kriteria untuk membuat indeks.

Secara umum, pertimbangkan untuk membuat indeks pada kolom di salah satu situasi berikut:

  • Kolom yang diindeks sering ditanyakan dan mengembalikan persentase kecil dari total jumlah baris dalam tabel.

  • Batasan integritas referensial ada pada kolom atau kolom yang diindeks. Indeks adalah cara untuk menghindari kunci tabel penuh yang akan diperlukan jika Anda memperbarui kunci utama tabel induk, bergabung ke dalam tabel induk, atau menghapus dari tabel induk.

  • Batasan kunci unik akan ditempatkan pada tabel dan Anda ingin secara manual menentukan indeks dan semua opsi indeks.

Semua indeks akan dipertimbangkan dalam arti bahwa semua indeks pada tabel dalam kueri diperiksa untuk menentukan apakah mereka dapat digunakan. Mereka yang bisa diperiksa lebih lanjut untuk menentukan kegunaan.

Leigh Riffel
sumber
7

Selama statistik Anda mutakhir, pengoptimal berbasis biaya harus membuat keputusan yang masuk akal mengenai indeks mana yang akan digunakan. Jika tidak, itu saatnya menggunakan petunjuk . Itu tidak akan pernah berkonsultasi indeks pada kolom yang tidak perlu untuk memenuhi permintaan.

Gayus
sumber
0

Saya menemukan ini di Memilih Strategi Indeks dari Panduan Pengembang Aplikasi ini . Halaman itu adalah tentang 'memilih strategi indeks':

Batasi Jumlah Indeks untuk Setiap Tabel

Semakin banyak indeks, semakin banyak overhead yang dikeluarkan saat tabel diubah. Ketika baris dimasukkan atau dihapus, semua indeks pada tabel harus diperbarui. Ketika kolom diperbarui, semua indeks pada kolom harus diperbarui.

Anda harus mempertimbangkan manfaat kinerja indeks untuk kueri terhadap overhead kinerja pembaruan. Misalnya, jika sebuah tabel hanya baca-saja, Anda mungkin menggunakan lebih banyak indeks; tetapi, jika tabel sangat diperbarui, Anda mungkin menggunakan lebih sedikit indeks.

Sangram
sumber
2
Dari pertanyaan: "Jelas menjaga beberapa indeks berbeda memiliki dampak negatif pada menyisipkan dan menghapus kinerja. Bagaimana dengan kinerja permintaan"
Jack mengatakan coba topanswers.xyz