Kami memiliki database yang sangat besar dengan ratusan indeks yang tidak digunakan menurut statistik DMV, yang telah terakumulasi sejak server terakhir kali di-boot ulang pada bulan Juli. Salah satu DBA kami membuat pernyataan peringatan berikut, yang tidak masuk akal bagi saya:
- Sebelum kita menjatuhkan indeks, kita perlu memastikan jika tidak menerapkan batasan keunikan, karena pengoptimal kueri mungkin memerlukan indeks ini untuk ada.
- Setiap kali Indeks dibuat, statistik yang terkait dengan indeks itu juga dibuat di SQL Server. Kueri mungkin tidak menggunakan indeks tetapi mungkin menggunakan statistiknya. Jadi kita dapat mengalami situasi, setelah menjatuhkan indeks kinerja permintaan tertentu menjadi sangat buruk. SQL Server tidak menyimpan statistik penggunaan statistik. Meskipun kami memiliki fitur "Buat Statistik Otomatis" yang diaktifkan pada basis data kami, saya tidak tahu semua parameter harus dipenuhi secara internal sebelum pengoptimal kueri akan membuat statistik yang hilang.
Mengenai # 1, menurut saya SQL Server akan benar-benar melakukan pencarian pada indeks untuk menentukan keunikan sebelum penyisipan / pembaruan dilakukan, dan oleh karena itu, indeks tidak akan ditampilkan sebagai tidak digunakan.
Mengenai # 2, apakah ini benar-benar mungkin?
Omong-omong, ketika saya mengatakan indeks tidak digunakan, maksud saya tidak mencari dan tidak memindai.