У меня есть таблица довольно скромного размера, но она увеличится до нескольких миллионов строк, поэтому я собираюсь строить ее с самого начала.
Таблица содержит около 15 столбцовсодержит информацию о производительности телефонии агента, но это не очень актуально.Один из запросов, выполняемых в этой таблице, просматривает данные из 4 столбцов за последний месяц по agent_ID.Конечно, обычно я просто использовал бы индекс покрытия для 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)