Я создаю надежную таблицу дат, чтобы узнать, как наилучшим образом связаться с ней. Кластерный индекс первичного ключа будет включен в ключ целочисленного ключа смарт-даты (по спецификации Кимбалла) с именем DateID. До сих пор я бежал запросы к ним так:Таблица даты/измерение запросов и индексов
select Foo.orderdate -- a bunch of fields from Foo
,DTE.FiscalYearName
,DTE.FiscalPeriod
,DTE.FiscalYearPeriod
,DTE.FiscalYearWeekName
,DTE.FiscalWeekName
FROM SomeTable Foo
INNER JOIN
DateDatabase.dbo.MyDateTable DTE
ON DTE.date = CAST(FLOOR(CAST(Foo.forderdate AS FLOAT)) AS DATETIME)
Имейте в виду, что дата является некластеризованным индекс поля со значениями, такими как: 2000-01-01 00: 00: 00,000
Это только что случилось с тем, что, поскольку у меня есть кластерный целочисленный индекс (DATEID), возможно, мне следует преобразовать дату-время в поле моей базы данных, чтобы он соответствовал ему и привязывался на основе этого поля.
Что вы, люди, думаете?
Кроме того, в зависимости от вашего первого ответа, если я обычно вытягиваю эти поля из таблицы дат, какой индекс я могу оптимизировать для поиска этих полей? Индекс покрытия?
Как правило, я знаю, что я всегда избегаю первичного ключа datetime. Вы можете легко сжечь одинаковые значения. –
Не могли бы вы рассказать об этом? – DavidStein
, если у вас есть первичный ключ, который является значением даты и времени, и вы создаете его с помощью GETDATE(), то рано или поздно вы получите отказ ключа ключа, когда несколько человек попытаются вставить одновременно. ИЛИ, если вы вставляете из оператора select, еще проще получить дубликаты. –