5
我有一個表,它是在目前相當規模不大,但將增長到幾百萬行,所以我希望從一開始就建立的東西。SQL服務器過濾索引
表包含15個左右的包含代理電話的性能信息列,但不是真正相關。其中一個在此表上運行的查詢將查看agent_ID在上個月的4列中的數據。當然,我通常只會在Agent_ID和日期包括4列的覆蓋索引並完成它,但我期待看看我能否比這更聰明。
由於我使用的是SQL服務器2008R2我以爲我會看看過濾索引並且只填充了當月的數據索引。問題是我似乎無法接受除濾波器上的硬性值之外的任何內容。
我是不是找錯了樹這一塊,你可以做,甚至在SQL服務器,而不必訴諸於具有兩個表或一些其他類型的分區?
編輯: 感謝馬庫斯我知道,知道這是不可能做到這一點沒有一些體力勞動。
爲此我做了這個劇本,我將在黑暗的時間每個月開始運行到移動索引窗口
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個月並每月重新創建 – 2010-10-21 10:46:17