2010-10-21 13 views
5

मेरे पास एक सारणी है जो इस समय आकार में काफी मामूली है लेकिन कुछ मिलियन पंक्तियों तक बढ़ेगी, इसलिए मैं शुरुआत से ही चीजों को बनाने की तलाश में हूं।एसक्यूएल सर्वर फ़िल्टर किए गए इंडेक्स

तालिका में 15 या तो कॉलम शामिल है जिसमें एजेंट टेलीफोनी प्रदर्शन के लिए जानकारी है लेकिन यह वास्तव में प्रासंगिक नहीं है। इस तालिका पर चलने वाले प्रश्नों में से एक एजेंट_आईडी द्वारा पिछले महीने के लिए 4 कॉलम से डेटा देखता है। बेशक आम तौर पर मैं केवल एजेंट कॉल पर एक कवरेज इंडेक्स और 4 कॉलम समेत डेट करता हूं और इसके साथ किया जाता हूं लेकिन मैं देख रहा हूं कि मैं उससे थोड़ा अधिक स्मार्ट हो सकता हूं या नहीं।

जैसा कि मैं SQL सर्वर 2008R2 का उपयोग कर रहा हूं, मैंने सोचा कि मैं फ़िल्टर किए गए इंडेक्स पर एक नज़र डालेगा और केवल वर्तमान माह से डेटा के साथ इंडेक्स पॉप्युलेट होगा। समस्या यह है कि मैं फ़िल्टर पर एक कठिन मूल्य के अलावा कुछ भी स्वीकार करने के लिए प्रतीत नहीं कर सकता।

क्या मैं इस के साथ गलत पेड़ को भड़क रहा हूं, क्या आप एसक्यूएल सर्वर में भी दो टेबल या किसी अन्य प्रकार के विभाजन का सहारा ले सकते हैं?

संपादित करें: मार्कस के लिए धन्यवाद मुझे पता है कि कुछ मैन्युअल काम किए बिना ऐसा करना संभव नहीं है।

कि अंत मैं इस स्क्रिप्ट है कि मैं अंधेरे घंटे के दौरान प्रत्येक महीने के आरंभ में चलेंगे

USE [Tracker_3] 
GO 
DECLARE @FirstOfMonth datetime 
DECLARE @LastOfMonth datetime 

declare @strSQL as varchar(max) 
set @FirstOfMonth = CONVERT(smalldatetime, CONVERT(varchar(4), DATEPART(yy, GETDATE())) + '-' + CONVERT(varchar(2), DATEPART(mm, GETDATE())) + '-' + '1') 
set @LastOfMonth = DATEADD(dd, -1, DATEADD(mm, +1, @FirstOfMonth)) 


set @strSQL=' 

CREATE NONCLUSTERED INDEX [tblAgent_int_data_Covering_1] ON [dbo].[tblAgent_interval_data] 
(
    [Login_ID] ASC, 
    [Date] ASC 
) 
INCLUDE ([i_acdtime], 
[i_acwtime], 
[holdacdtime], 
[acdcalls]) 
WHERE [date] >= ''' + convert(char(10),convert(date,@firstOfMonth)) + ''' AND [date] <= '''+ convert(char(10),convert(date,@LastOfMonth)) + ''' 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
    SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, 
    DROP_EXISTING = ON, ONLINE = OFF, 
    ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, 
    FILLFACTOR = 100) ON [T3_Data_2] 

' 

exec (@strSQL) 
+2

आप हमेशा 2 महीने कवर कर सकते हैं और इसे मासिक बना सकते हैं –

उत्तर

3

पर सूचकांक खिड़की स्थानांतरित करने के लिए बना दिया है करने के लिए आप क्या पूरा करने की कोशिश किसी तरह के बिना संभव नहीं है "मैनुअल" रखरखाव - यह problem of indexing "Age" के समान है।

मैं कहूंगा कि सबसे अच्छा तरीका विभाजन है - लेकिन आपको नियमित रूप से नए विभाजन को छोड़ना/बनाना होगा।

संबंधित मुद्दे