Мы пытаемся ускорить некоторые из наших хранимых процедур, уменьшая неявные преобразования.Одна из проблем, которую мы пытаемся выяснить, состоит в том, как исправить несколько индексированных представлений, подобных этому:
Time.UserID is INT
Time.TimeUnit is DECIMAL(9,2)
Time.BillingRate is MONEY
Select
UserID,
SUM(TimeUnit) as Hours,
SUM(TimeUnit*BillingRate) as BillableDollars
FROM
Time
GROUP BY
UserID
дает нам представление со столбцами:
UserID(int, null)
Hours(decimal(38,2), null)
BillableDollars(decimal(38,6), null)
Мы бы предпочли иметь Hours(decimal(9,2),null)
и BillableDollars(money,null)
.
CAST(SUM(TimeUnit*BillingRate) AS MONEY) as BillableDollars
Возвращено:
Невозможно создать кластеризованный индекс 'ix_indexName' для представления 'x.dbo.vw_viewName', поскольку список выбора представления содержит выражение для результата статистической функции или столбца группировки.Попробуйте удалить выражение для результата статистической функции или столбца группировки из списка выбора.
И нас беспокоит эффективность SUM(CAST(TimeUnit*BillingRate AS MONEY)) as BillableDollars
Каков наилучший способ сохранить этитипы столбцов или есть «лучшая практика»?