vista indicizzata e T-SQL che danno gli stessi risultati in quanto distinta in SQL Server 2008 R2
-
11-10-2019 - |
Domanda
Voglio creare vista indicizzata MyView con tale 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)
Questa T-SQL funziona bene e permette di impostare un indice cluster su MyView .
Il problema è che tavolo ThemeWorkplace
contiene diversi record con lo stesso Theme_ID
.
E anche io uso GROUP BY
- ottengo di valore Object_Count
che
uguale: (valore Object_Count
reale) * count (Theme_ID
in ThemeWorkplace
).
Non posso usare la parola DISTINCT
in T-SQL, perché in questo caso non è possibile creare l'indice a vista.
Che cosa è un suggerimento per ottenere risultati corretti, a mio avviso?
Soluzione
Come hai notato, ci sono significative restrizioni sulla creazione di una vista indicizzata. Le tecniche che potrebbero aiutare a qui, come distinti o un subquery sono vietati. Credo che sarà necessario sacrificare materializzare la vista in questo caso particolare.