В Scaling Up Your Data Warehouse with SQL Server 2008 R2 автор рекомендует использовать ключ целочисленной даты в формате YYYYMMDD в качестве кластерного индекса в ваших таблицах фактов, чтобы оптимизировать скорость запроса.TSQL DateTime to DateKey Int
Каков наилучший способ преобразования ключевого поля даты в ключ даты? Я чувствую, что следующий будет работать, но немного неаккуратно:
select Replace(CONVERT(varchar,GETDATE(),102),'.','')
Очевидно, что я не использую GETDATE, а столбец даты в таблице, которая будет использовать в своих агрегатах.
Во-первых, как бы вы предложили сделать это преобразование? Является ли моя идея приемлемой?
Во-вторых, у кого был большой успех с использованием ключа даты в виде кластеризованного индекса?
преобразования GETDATE() прямо в INT с IS 112 дает 41008, потому что это количество дней с даты 0. Вы можете проверить, сравнив этот результат с результатом DATEDIFF между 0 и GETDATE(). 'SELECT CONVERT (INT, GETDATE(), 112), DATEDIFF (день, 0, GETDATE())' –
@AdamPorad +1 Приветствия, поясняющие, что – HeavenCore
Я думаю, что ваш тест испорчен. Разница в прошедшем времени является результатом отображения длинного списка значений на экране.Кроме того, вы используете GetDate(), поэтому SQL Server распознает его как константу и фактически не выполняет вычисления для каждой строки. Вам нужно использовать столбец из фактической таблицы. Наконец, для точной проверки производительности вам необходимо удалить чистые буферы и освободить кеш процедур. Вы не должны делать это на производственном сервере. –