Новая дата лучше старой?

#sql #performance #sql-server-2005 #sql-server-2008-r2

#sql #Производительность #sql-server-2005 #sql-server-2008-r2

Вопрос:

В нашем хранилище данных есть таблица измерений CalendarTimeUTC, которая выглядит следующим образом:

введите описание изображения здесь

PK в таблице — это CalendarTimeUTCId (кластеризованный). Раньше это было поле Int. Во всех таблицах фактов есть calendarId (некоторые из них представляют собой таблицы с разделением на несколько миллиардов строк).

Мы хотим перейти от ввода значения ДАТЫ к значению ДАТЫ ЧАСА в этом поле.

Примеры данных (старых и новых):

введите описание изображения здесь

Теперь, с появлением SQL 2008 и блестящей новой реализации DATETIME, есть ли причина переключить столбец ID измерения с INT на DATETIME?

Как это повлияет на размер индекса в таблицах фактов? Что еще более важно, как это повлияет на производительность?

Комментарии:

1. Я бы не стал вводить часы в поле даты — в 24 раза больше записей в вашем измерении календаря….

2. Я изо всех сил пытаюсь понять, как это связано с date типом. Ранее (насколько я понимаю, до SQL Server 2008) ваша таблица календаря содержала только даты, но значения были datetime типа, потому что тогда в SQL Server не было date типа. Теперь вы планируете добавить временную часть, и вам снова придется использовать datetime . Так что же вы подразумеваете под вовлечением date ?

3. @Andriy M: Ошибка с моей стороны — я имею в виду DATETIME .

4. Радж, зачем ты вообще это делаешь? Sql Server 2005 имеет тип данных DateTime. Какая часть версии 2008 является блестящей и новой? Почему вы создаете идентификатор, который выглядит как дата? Почему вы сохраняете дату, которая выглядит как идентификатор? Есть ли еще поля в вашей таблице измерений календаря, которые вы не показываете?

Ответ №1:

Тип данных Datetime занимает 8 байт. Тип данных Int занимает всего 4 байта. Если вы хотели преобразовать в тип данных date (например, потому что вам нужно было использовать функции обработки даты), я бы предложил использовать smalldatetime, который занимает всего 4 байта.

Что касается индексов и производительности: поскольку индексы будут иметь одинаковый физический размер данных, я не думаю, что вы увидите снижение производительности или увеличение размера индексов.