अनुक्रमित दृश्य के लिए एक आदर्श परिदृश्य की तरह लगता है, जो आपको क्वेरी समय के बजाय गणना समय पर गणना और समुच्चय के लिए भुगतान करने की अनुमति देता है।
CREATE VIEW dbo.MyIndexedView
WITH SCHEMABINDING
AS
SELECT Enroll_Date, UserID, RawCount = COUNT_BIG(*)
FROM dbo.UserTable
GROUP BY Enroll_Date, UserID;
GO
CREATE UNIQUE CLUSTERED INDEX CIX_miv ON dbo.MyIndexedView(Enroll_Date, UserID);
इसे बनाने में कुछ समय लगेगा, और निश्चित रूप से बेस टेबल पर एक सूचकांक की तरह, सभी डीएमएल संचालन में रखरखाव की आवश्यकता होगी।
अब इस दृश्य के विरुद्ध क्वेरी काफी हद तक समान होगी - दृश्य में प्रत्येक पंक्ति अब एक अलग उपयोगकर्ता / दिनांक कॉम्बो का प्रतिनिधित्व करती है, जिससे कि आंकड़ा एक एकल COUNT (*) द्वारा गणना की जा सकती है, जबकि आधार तालिका में पंक्तियों की कुल संख्या है आपके लिए पहले से ही आंशिक रूप से एकत्र किया गया है, अब आपको बस प्रति दिनांक SUM का उपयोग करके उन्हें जोड़ना होगा:
SELECT Enroll_Date,
[Record #] = SUM(RawCount),
[User #] = COUNT(*)
FROM dbo.MyIndexedView WITH (NOEXPAND)
GROUP BY Enroll_Date;
यह और यह याद रखने के बाद NOEXPAND संकेत मिला ।
मैं आपको बिना किसी संदेह के बता सकता हूं कि यह क्वेरी आपकी वर्तमान क्वेरी (लेकिन कितनी नहीं) से भी तेज होगी, सिवाय उस दुर्लभ मामले में जहां आपके पास प्रत्येक तिथि के लिए ठीक एक उपयोगकर्ता है (जिस स्थिति में डेटा की समान मात्रा होगी) पढ़ा जा सकता है) और हम जिन स्तंभों के बारे में जानते हैं, वे आधार तालिका के सूचकांक में एकमात्र स्तंभ हैं। क्या रीड टाइम के दौरान प्रदर्शन का प्रदर्शन अतिरिक्त काम के लायक है, जो आपके कार्यभार के लेखन हिस्से को प्रभावित करेगा, ऐसा कुछ है जो हम आपको नहीं बता सकते हैं - आपको इसे व्यापार-नापने के लिए परीक्षण करना होगा (कोई सूचकांक मुक्त नहीं है)।
और यदि आप अक्सर विशिष्ट, अच्छी तरह से परिभाषित श्रेणियों (कहते हैं, वर्तमान तिमाही या वर्ष के लिए) के लिए Enroll_Date के खिलाफ एक ही आम का उपयोग करते हैं, तो आप मिलान फ़िल्टर किए गए अनुक्रमित जोड़ सकते हैं जो कि I / O को और भी कम कर सकते हैं (लेकिन हमेशा हमेशा अदला - बदली)।
आप बेस टेबल पर क्लस्टर इंडेक्स लगाने पर भी विचार कर सकते हैं। यह उन बहुत ही दुर्लभ उपयोग मामलों में से एक नहीं लगता है जो एक ढेर से लाभान्वित होते हैं।