Saya sering menggunakan SSMS untuk menguji prosedur tersimpan lambat saya untuk indeks yang hilang. Setiap kali saya melihat "Indeks Hilang (Dampak xxx)" reaksi kneejerk saya adalah hanya membuat indeks baru. Ini menghasilkan permintaan yang lebih cepat setiap kali sejauh yang saya tahu.
Ada alasan mengapa saya tidak harus terus melakukan ini?
Jawaban:
Banyak alasan.
Salah satu yang terbesar yang dapat saya pikirkan adalah bahwa DMV indeks yang hilang tidak memperhitungkan indeks yang ada.
Contoh:
Anda punya meja dengan
ColA, ColB, ColC
.Saat ini Anda memiliki indeks
ColA
. DMV indeks yang hilang akan menyarankan Anda menambahkan indeks(ColA, ColB)
. Ini mungkin benar, tetapi hal yang cerdas untuk dilakukan adalah menambahkanColB
sebagai kunci kedua pada indeks yang ada. Kalau tidak, Anda memiliki cakupan duplikat dan ruang dan overhead terbuang sia-sia.Demikian pula, jika Anda memiliki indeks aktif
ColB INCLUDE (ColA)
, ini mungkin menyarankan indeks aktifColB INCLUDE (ColC)
. Sekali lagi hal yang cerdas untuk dilakukan adalah menambahkanColC
ke daftar sertakan dalam indeks yang ada.Indeks yang disarankan memiliki tampilan yang sangat sempit - mereka hanya melihat satu permintaan, atau satu operasi dalam satu permintaan. Mereka tidak memperhitungkan apa yang sudah ada atau pola kueri Anda yang lain.
Anda masih memerlukan manusia yang berpikir untuk menganalisis keseluruhan strategi pengindeksan dan memastikan bahwa struktur indeks Anda efisien dan kohesif.
Jika tidak ada masalah dengan hanya menambahkan semua indeks yang disarankan maka tidak perlu bahkan mereka disarankan - mereka akan dilaksanakan secara otomatis.
sumber
duplicate index scripts
atau yang serupa ada banyak sumber daya untuk melacak hal-hal ini. Saya mengelola sebagian besar indeks saya sendiri dan tahu sedikit tentang hal itu tetapi saya masih menemukan dupes dari waktu ke waktu.Saya merekomendasikan penggunaan teknik penyetelan ini secara hati-hati karena saya telah menemukan saran indeks yang hilang muncul oleh rencana kueri untuk secara konsisten kurang dapat diandalkan karena kueri dan skema DB menjadi lebih kompleks secara progresif. Ini karena berbagai alasan dalam pengalaman saya:
1) "Peningkatan persen" bisa menjadi jalan keluar untuk semua kecuali pertanyaan paling sederhana / indeks paling jelas, setelah semua itu hanya perkiraan dan tidak berasal dari biaya aktual yang dikeluarkan atau jumlah baris aktual ketika kueri berjalan. Saya telah melihat biaya permintaan naik setelah menerapkan indeks yang disarankan, atau bahkan tidak digunakan dan rencana tetap sama.
2) Rencana kueri itu sendiri tidak optimal, baik karena pembangunan kueri (bergabung dan di mana klausa tidak dioptimalkan, dll), atau perkiraan jumlah baris tidak aktif karena statistik yang hilang / ketinggalan zaman. Pengindeksan ke rencana kueri yang buruk sering kali paling baik merupakan solusi bantuan-band dengan hanya peningkatan kinerja secara bertahap.
3) Anda mungkin tidak melihat keseluruhan gambar. Ini terutama benar ketika hanya menggunakan rencana grafis dan tidak melihat XML untuk melihat apakah lebih dari satu indeks yang hilang telah disarankan. Yang ditunjukkan pertama dalam rencana grafis belum tentu yang paling berdampak pada kueri.
4) Saya juga menemukan banyak contoh indeks baru yang disarankan ketika memodifikasi indeks yang ada akan dilakukan. Lihat jawaban lain di sini mengenai hal ini, mereka tepat, tidak perlu bagi saya untuk menjelaskan lebih lanjut.
Saya hanya menggunakan saran indeks yang hilang sebagai titik awal ketika bekerja dengan kueri / lingkungan yang tidak dikenal untuk melihat ke mana harus mencari lebih dalam. Saya mendapatkan hasil yang lebih baik dengan melihat operator dalam paket (terutama pencarian / pemindaian / penggabungan) dan memeriksa jendela tooltip atau properti untuk melihat kolom mana yang terlibat dan menggunakannya untuk menentukan kandidat indeks untuk menguji peningkatan.
sumber
Ada banyak alasan, terutama - mengetahui bagaimana indeks bekerja dan disimpan - Anda akan selalu membuat indeks lebih baik, atau setidaknya - tidak lebih buruk, yang disarankan SSMS
sumber