我现在有一张桌子,它的尺寸很小,但是会增加到几百万行,所以我希望从一开始就把它建造好。
该表包含15个左右的列,其中包含有关代理电话性能的信息,但这并不真正相关。在这个表上运行的查询之一是按agent_id查看上个月4列中的数据。当然,通常情况下,我只需要一个包含agent_id和date的覆盖索引,包括4列,然后就可以完成了,但是我想看看我是否能比这更聪明一些。
当我使用SQL Server 2008R2时,我想我将查看筛选后的索引,并且只使用当前月份的数据填充索引。问题是,除了过滤器上的硬值外,我似乎无法让它接受任何其他值。
我是不是用这个错误的树,在SQL Server中甚至可以这样做而不必使用两个表或其他类型的分区?
编辑:
多亏了马库斯,我知道没有一些体力活是不可能做到这一点的。
为此,我制作了这个脚本,在每个月初的黑暗时间运行它来移动索引窗口
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)