मेरे पास Log और LogItem टेबल हैं; मैं दोनों से कुछ डेटा हड़पने के लिए एक क्वेरी लिख रहा हूं। हजारों हैं Logs
और प्रत्येक में Log
125 तक हो सकते हैंLogItems
प्रश्न में प्रश्न जटिल है, इसलिए मैं इसे छोड़ रहा हूं (यदि कोई सोचता है कि यह महत्वपूर्ण है कि मैं शायद इसे पोस्ट कर सकता हूं), लेकिन जब मैंने एसएसएमएस अनुमानित क्वेरी योजना चलाई, तो उसने मुझे बताया कि एक नया गैर-क्लस्टर सूचकांक 100% तक के प्रदर्शन में सुधार करेगा। ।
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
बस मज़े के लिए, मैंने इस नए सूचकांक को बनाया और क्वेरी और बहुत कुछ मेरे आश्चर्य के लिए चलाया, अब मेरी क्वेरी को चलाने के लिए ~ 1 सेकंड लगता है, जब इससे पहले कि यह 10+ सेकंड का था।
मैंने यह मान लिया कि मेरा मौजूदा सूचकांक इस नई क्वेरी को कवर करेगा, इसलिए मेरा सवाल यह है कि मेरी नई क्वेरी में बेहतर प्रदर्शन के लिए उपयोग किए गए एकमात्र कॉलम पर एक नया इंडेक्स क्यों बनाया? क्या मुझे अपने where
खंडों में प्रयुक्त स्तंभों के प्रत्येक अद्वितीय संयोजन के लिए एक सूचकांक चाहिए ?
नोट: मुझे नहीं लगता कि ऐसा इसलिए है क्योंकि SQL सर्वर मेरे परिणामों को कैशिंग कर रहा है, मैंने इंडेक्स बनाने से पहले 25-30 बार क्वेरी को चलाया और इसे लगातार 10-15 सेकंड लिया, इंडेक्स के बाद अब यह सुसंगत है ~ 1 या कम।