Отфильтрованные индексы SQL-сервера

У меня есть таблица, которая на данный момент довольно скромна по размеру, но она вырастет до нескольких миллионов строк, поэтому я хочу построить ее с самого начала.

Таблица содержит около 15 столбцов, содержащих информацию для производительность агентской телефонии, но это не совсем актуально. Один из запросов, выполняемых по этой таблице, просматривает данные из 4 столбцов за последний месяц по идентификатору агента. Конечно, обычно я просто покрывающий индекс для Agent_ID и даты, включая 4 столбца, и покончил с этим, но я хочу посмотреть, смогу ли я быть немного умнее этого.

Поскольку я использую SQL server 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)
]
5
задан Kevin Ross 21 October 2010 в 11:52
поделиться