आप इस के लिए एक समारोह आधारित सूचकांक का उपयोग करने में सक्षम हो सकता है, हालांकि यह इस परिदृश्य के लिए बहुत ही सुखद नहीं है:
create index TimeSeriesPeriodSs1 on TimeSeriesPeriod (
case when validationStatus= N'Pending' and completionStatus= N'Complete' then validationStatus else null end,
case when validationStatus= N'Pending' and completionStatus= N'Complete' then completionStatus else null end);
आप क्वेरी के where
बनाने के लिए होगा यद्यपि यह सूचकांक का उपयोग करने के लिए बिल्कुल ठीक है।
select <fields>
from TimeSeriesPeriod
where case when validationStatus= N'Pending' and completionStatus= N'Complete' then validationStatus else null end = N'Pending'
and case when validationStatus= N'Pending' and completionStatus= N'Complete' then completionStatus else null end = N'Complete';
यह एक बहुत neater अगर आप (नियतात्मक) कार्यों case
करने के लिए परिभाषित कर सकते हैं होगा। कुछ और जानकारी और उदाहरणों के लिए here देखें। या त्वरित Google से this।
स्रोत
2011-05-09 17:13:17
आप सिर्फ एक सामान्य सूचकांक नहीं बनाता और में जहां खंड डाल अपने एसक्यूएल का चयन करें? इस तरह आपकी सामान्य इंडेक्स एक और चुनिंदा एसएमएमटी की सेवा करेगी जहां क्लॉज एक्सप्रेशन एक ही फ़ील्ड को मारता है। हालांकि SQL सर्वर फ़िल्टर किए गए इंडेक्स से परिचित नहीं है, इसलिए इसके लाभ से स्पष्ट नहीं है। – tbone
@tbone - आकार –
@tbone का कारण हो सकता है: फ़िल्टर किए गए इंडेक्स का पूरा बिंदु एक बड़ी तालिका पर एक इंडेक्स को बनाए रखने के ऊपरी हिस्से से बचने के लिए है जब इसकी केवल एक छोटी सबसेट की आवश्यकता होती है। – Gabe