Frage

Ich möchte indizierte Sicht erstellen MyView mit einem solchen 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)

Dieses T-SQL funktioniert gut und ermöglicht auf einen gruppierten Index auf MyView .

Das Problem ist, dass Tabelle ThemeWorkplace mehrere Datensätze mit gleichem Theme_ID enthält. Und auch ich GROUP BY verwenden - ich in Object_Count Wert,
entspricht: (real Object_Count Wert) * count (Theme_ID in ThemeWorkplace).

Ich kann nicht DISTINCT Wort in T-SQL, weil in diesem Fall benutze es unmöglich ist, Index auf Sicht zu erstellen.

Was ist ein Vorschlag korrekte Ergebnisse aus meiner Sicht zu bekommen?

War es hilfreich?

Lösung

Wie Sie bemerkt haben, gibt es erhebliche Einschränkungen für eine indizierte Sicht zu schaffen. Die Techniken, die Ihnen dabei helfen können, wie zum Beispiel verschiedenen oder eine Unterabfrage sind verboten. Ich denke, Sie werden in diesem speziellen Fall materialisieren die Ansicht opfern müssen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top