SQL Server 2008 R2で異なるものと同じ結果を与えるインデックス付きビューとT-SQL
-
11-10-2019 - |
質問
インデックス付きビューを作成したいです 私の見解 そのようなT-SQLで
Select
o.Theme_ID as Theme_ID,
DATEADD(day, DATEDIFF(day, 0, o.Object_CreationDate), 0) as Objext_CreationDate,
Count_BIG(*) as ObjectCount, o.Object_Tonality from [dbo].Object o
inner join [dbo].Theme t on o.Theme_ID = t.Theme_ID
inner join [dbo].[ThemeWorkplace] tw on t.Theme_ID = tw.Theme_ID
inner join [dbo].Workplace w on w.Workplace_ID = tw.Workplace_ID
... where t.Theme_DeletedMark = 0
AND (w.Workplace_AccessType = 1 OR w.Workplace_AccessType = 8)
AND Object_DeletedMark = 0 ...
Group BY o.Theme_ID,o.Object_Tonality, DATEADD(day, DATEDIFF(day, 0, o.Object_CreationDate), 0)
このT-SQLは正常に動作し、クラスター化されたインデックスをに設定できます 私の見解.
問題はそのテーブルです ThemeWorkplace
同じレコードがいくつか含まれています Theme_ID
。そして、私も使用します GROUP BY
- 私は入ります Object_Count
それを大切にします
平等:(リアル Object_Count
値) * count(Theme_ID
の ThemeWorkplace
).
使えない DISTINCT
T-SQLの単語。この場合、表示中にインデックスを作成することは不可能であるためです。
私の見解で正しい結果を得るための提案は何ですか?
解決
ご承知のとおり、インデックスビューの作成には大きな制限があります。別個やサブクエリなど、ここであなたを助けるかもしれないテクニックは禁止されています。この特定のケースで見解を具体化する犠牲を払う必要があると思います。
所属していません StackOverflow