Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 поле для partition  [new]
Artur Bondarenko
Member

Откуда:
Сообщений: 21
Проектируется ХранилищеДанных на MSSQL 2008.
Для таблиц Продажи и Остатки создаются партишины по месяцам.
Столбец DateReport в обоих таблицах содержит только дату, время не существенно (00:00:00).
Какой тип - datetime или smalldatetime - выбрать для поля DateReport?
datetime - 8 байт, smalldatetime - 4 байта.
Будет ли разница в производительности?
18 июн 09, 10:14    [7313972]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Artur Bondarenko
Проектируется ХранилищеДанных на MSSQL 2008...
содержит только дату, время не существенно (00:00:00).
Какой тип - datetime или smalldatetime - выбрать для поля DateReport?
datetime - 8 байт, smalldatetime - 4 байта...
В 2008 есть тип date, размером 3 байта и с диапазоном от 0001-01-01 до 9999-12-31.
18 июн 09, 10:22    [7314008]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Artur Bondarenko
Member

Откуда:
Сообщений: 21
Спасибо за совет.
Еще один вопрос.
А что, если в качестве partition-столбца использовать date_id - сурогатный ключ типа smallint - 2 байта - целые числа от 0 до N?
Будет ли в этом случае выигрыш в производительности?
Или это будет неудобно с точки зрения пользователя DataWarehouse - включать в запросы с фильтрами на дату условие на поле date_id и т.д.?
18 июн 09, 11:03    [7314229]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
iljy
Guest
Artur Bondarenko,

а для чего собственно? что мешает в качестве partition использовать непосредственно дату?
18 июн 09, 13:20    [7315211]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Артур Бондаренко
Member

Откуда: Одесса
Сообщений: 141
iljy

а для чего собственно? что мешает в качестве partition использовать непосредственно дату?

Вопрос в производительности. Поле типа smallint меньше чем date, соответсвенно меньше кластерный индекс, быстрее выполняются запросы.
18 июн 09, 14:29    [7315642]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
Артур Бондаренко
iljy

а для чего собственно? что мешает в качестве partition использовать непосредственно дату?

Вопрос в производительности. Поле типа smallint меньше чем date, соответсвенно меньше кластерный индекс, быстрее выполняются запросы.
Между двумя и тремя байтами разница окажется не сильно заметной. А вот удобство работы с типом может быть разным, хотя вам должно быть виднее.
18 июн 09, 14:38    [7315709]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
Артур Бондаренко
Поле типа smallint меньше чем date, соответсвенно меньше кластерный индекс, быстрее выполняются запросы.
Мне не совсем понятно разбивать по месяцам. Думаете, чем на больше разобьете, тем выше скорость запросов? ;)
18 июн 09, 15:02    [7315888]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
Senya_L
Артур Бондаренко
Поле типа smallint меньше чем date, соответсвенно меньше кластерный индекс, быстрее выполняются запросы.
Мне не совсем понятно разбивать по месяцам. Думаете, чем на больше разобьете, тем выше скорость запросов? ;)

1000 партиций на таблицу- ограничение все таки, хотя если бить по неделям, то будет достаточно почти на 20 лет...
18 июн 09, 15:04    [7315901]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Артур Бондаренко
Member

Откуда: Одесса
Сообщений: 141
Александр Волок (def1983),
Разбивать буду 100% по месяцам, в каждом месяце 30-50 млн. записей (таблица Продажи)
18 июн 09, 15:33    [7316079]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
Тогда, вместо интовых полей я бы посоветовал остановиться на smalldatetime (если, конечно диапазон дат подходит).

Тип Date имеет свои ограничения, которые по непонятным причинам имеют место.

к примеру:
-- работает
select cast(getdate() as date) 

-- не работает 
select cast(getdate() as date) -1
Msg 206, Level 16, State 2, Line 1
Operand type clash: date is incompatible with int

-- работает
select getdate() -1
20 июн 09, 10:39    [7323786]     Ответить | Цитировать Сообщить модератору
 Re: поле для partition  [new]
Александр Волок (def1983)
Member

Откуда: Rotterdam
Сообщений: 4959
Кстати, при выборе гранулярности разбивки по партициям.

Учитывайте, что SQL Server 2008 имеет усовершенствования связанные с параллельным чтением партиций. Если у вас множество запросов будут в пределах нескольких месяцев и больше, тогда ваш выбор будет оптимальным, если же запросы ориентированны на более скромные периоды, то вполне возможно что вы не получите ожидаемого прироста, связанного с вышепомянутым улучшением, только по тому что SQL Server считывает данные в основном с одной партиции.
20 июн 09, 10:48    [7323796]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить