Apakah boleh untuk secara buta menambahkan indeks yang hilang?

21

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?

OO
sumber
1
dapatkah Anda memberi tahu saya dari mana saya bisa mendapatkan fitur indeks yang hilang ini?
Ali Raza Iftikhar

Jawaban:

27

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 menambahkan ColBsebagai 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 aktif ColB INCLUDE (ColC). Sekali lagi hal yang cerdas untuk dilakukan adalah menambahkan ColCke 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.

JNK
sumber
Begitu ya, mungkin itu alasannya mengapa saya memiliki bazillion indexes. Saya kira saya harus mencoba memahami rencana menjelaskan ini lebih baik dan mencari tahu indeks secara manual.
OO
Jika Anda google duplicate index scriptsatau 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.
JNK
"Anda masih memerlukan manusia yang berpikir untuk menganalisis keseluruhan strategi pengindeksan dan memastikan bahwa struktur indeks Anda efisien dan kohesif." +1! Sebagai seorang konsultan, saya memiliki semua jenis klien dalam segala situasi. Kadang-kadang saya mendapatkan klien-klien itu karena mereka memiliki terlalu banyak (dan yang salah, yang berlebihan, dll) indeks - semua disarankan oleh penasihat tuning engine database.
Mike Walsh
@ JNK - Saya akan melakukannya.
OO
2
Poin bagus - indeks yang tumpang tindih jelas merupakan hal terbesar yang harus diperhatikan di sini. Dan tentu saja semakin banyak indeks yang Anda miliki, penyisipan yang lebih lambat menjadi, ditambah hit ke rawatan (menambah kompleksitas), dll.
Jeff Atwood
8

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.

FloorDivision
sumber
2

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

Oleg Dok
sumber