0

そんなt-sqlでインデックス付きビューMyViewを作りたい

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 は正常に機能し、MyViewにクラスター化インデックスを設定できます。

問題は、テーブルThemeWorkplaceに同じ を持つ複数のレコードが含まれていることTheme_IDです。そして、私も使用します- (実際の値) * count( in ) に等しい値GROUP BY を取得します。Object_Count
Object_CountTheme_IDThemeWorkplace

DISTINCTこの場合、ビューにインデックスを作成することは不可能であるため、t-sql で word を使用することはできません。

私の意見で正しい結果を得るための提案は何ですか?

4

1 に答える 1

1

お気づきのように、インデックス付きビューの作成には重大な制限があります。ここで役立つ可能性のある手法 (distinct やサブクエリなど) は禁止されています。この特定のケースでは、ビューの具体化を犠牲にする必要があると思います。

于 2010-12-17T14:36:36.193 に答える