Saya memiliki tabel Log dan LogItem; Saya sedang menulis kueri untuk mengambil beberapa data dari keduanya. Ada ribuan Logs
dan masing-masing Log
dapat memiliki hingga 125LogItems
Kueri yang dipermasalahkan rumit jadi saya melewatkannya (jika seseorang berpikir itu penting, saya mungkin dapat mempostingnya), tetapi ketika saya menjalankan paket SSMS Estimated Query, ia memberi tahu saya bahwa indeks Non-Clustered baru akan meningkatkan kinerja hingga 100% .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
Hanya untuk bersenang-senang, saya membuat indeks baru ini dan menjalankan kueri dan sangat mengejutkan saya, sekarang butuh ~ 1 detik untuk menjalankan kueri, ketika sebelum 10+ detik.
Saya berasumsi bahwa indeks saya yang ada akan mencakup permintaan baru ini, jadi pertanyaan saya adalah mengapa membuat indeks baru pada satu-satunya kolom yang digunakan dalam permintaan baru saya meningkatkan kinerja? Haruskah saya memiliki indeks untuk setiap kombinasi kolom unik yang digunakan dalam where
klausa saya ?
catatan: Saya tidak berpikir ini karena SQL Server sedang melakukan caching hasil saya, saya menjalankan kueri sekitar 25-30 kali sebelum saya membuat indeks dan secara konsisten butuh 10-15 detik, setelah indeks sekarang konsisten ~ 1 atau kurang.