暗黙的な変換を減らすことによって、格納されているprocsの一部を高速化しようとしています。私たちが把握しようとしている問題の一つは、これに似たいくつかのインデックス付きビューを修正する方法である:最適化されていない列の種類を強制的にインデックス化したインデックス付きビュー
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)
を使用することをお勧めします。
は、クラスタ化インデックスを作成できません「ix_indexName」 ビュー「x.dbo.vw_viewName」上のビューの 選択リストは、集計の結果に表現が含まれているので:返さ
CAST(SUM(TimeUnit*BillingRate) AS MONEY) as BillableDollars
機能またはグループ化の列。選択リストから 集計関数または列の結果の式を削除することを検討してください。
そして、私たちはこれらの列の型を維持するための最良の方法であるか、「ベストプラクティス」はありますでしょう何SUM(CAST(TimeUnit*BillingRate AS MONEY)) as BillableDollars
の効率について心配していましたか?
あなたは 'SUM(CAST)'のパフォーマンスを試しましたか? 'MONEY'ともっと実用的なデータ型(' DECIMAL(9,2) ')IMHOを比較しましたか? –