Bagaimana cara mengetahui kapan / jika saya memiliki terlalu banyak indeks?

26

Menjalankan Microsoft SQL Server Profiler setiap sekarang, itu menyarankan saya dengan sekelompok indeks dan statistik baru untuk membuat ("... 97% perkiraan peningkatan ...").

Dari pemahaman saya, setiap indeks yang ditambahkan dapat membuat SELECTkueri SQL lebih cepat tetapi juga UPDATEatau INSERTkueri lebih lambat karena indeks harus disesuaikan.

Yang saya heran adalah, kapan saya memiliki indeks / statistik "terlalu banyak"?

Mungkin tidak ada jawaban yang jelas tentang ini kecuali beberapa aturan praktis.

Uwe Keim
sumber
1
Terkait: dba.stackexchange.com/questions/56/…
Nick Chammas
Terima kasih, @Nick. Saya hati-hati mencari Google dan dba.se.com sebelum memposting pertanyaan saya. Menurut pendapat saya, ini agak tidak berhubungan. Saya tidak ingin tahu apakah indeks diperlukan tetapi bagaimana menentukan kapan terlalu banyak indeks dibuat UPDATEdan INSERTpernyataan terlalu lambat.
Uwe Keim
3
Apakah Anda membaca jawaban di sana? Jawaban yang diterima, misalnya, menautkan ke beberapa skrip analisis yang dapat membantu Anda mengidentifikasi indeks yang tidak digunakan yang harus dihapus. Anda mungkin menemukan itu membantu dalam menjawab pertanyaan Anda ketika Anda memiliki indeks "terlalu banyak".
Nick Chammas

Jawaban:

24

Profil beban Anda adalah faktor terpenting dalam menjawab pertanyaan ini.

  • Jika beban Anda baca-intensif, Anda ingin indeks memenuhi kueri terberat atau paling sering Anda.

  • Jika memuat Anda intensif-tulis, indeks dengan hati-hati. Indeks untuk memenuhi pencarian kebutuhan UPDATE, misalnya, serta satu atau dua SELECT Anda yang paling mahal.

  • Jika beban Anda adalah OLAP, indeks hemat karena Anda akan memindai tabel target.

Bagaimana Anda tahu Anda memiliki terlalu banyak indeks?

  • Ketika Anda dapat melihat bahwa beberapa dari mereka tidak digunakan oleh pertanyaan apa pun.

  • DELETE, UPDATE, atau INSERT yang sering muncul menunjukkan rencana kueri yang melibatkan beberapa perubahan indeks yang mahal (mis. Memasukkan indeks yang tidak tercakup , memperbarui , atau menghapus ). Gunakan penilaian Anda untuk menentukan apakah hukuman pada pernyataan DML tersebut sepadan dengan perolehan yang Anda dapatkan dari indeks yang harus diperbarui.

Nick Chammas
sumber
8

Jika Anda memiliki indeks yang sedang dipertahankan tetapi tidak pernah digunakan (atau jarang digunakan) maka Anda harus banyak indeks. Jika semua indeks Anda digunakan untuk meningkatkan kinerja pengguna, maka Anda tidak perlu banyak.

mrdenny
sumber
Bolehkah saya menyarankan untuk mengubah dua kejadian " menjadi " menjadi " juga ", karena saya tidak dapat mengeditnya karena suntingan saya perlu mengubah minimum 6 karakter?
Uwe Keim