Question

Je veux créer vue indexée MyView avec un tel 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)

Ce t-sql fonctionne très bien et permet de définir un index ordonné en clusters sur MyView .

Le problème est que la table contient ThemeWorkplace plusieurs enregistrements avec la même Theme_ID. Et même je l'utilise GROUP BY - je reçois en valeur Object_Count que
est égal à: (valeur réelle de Object_Count) * comptage (Theme_ID dans ThemeWorkplace).

Je ne peux pas utiliser mot DISTINCT en t-sql, car dans ce cas il est impossible de créer un index sur la vue.

Qu'est-ce qu'une suggestion pour obtenir des résultats corrects à mon avis?

Était-ce utile?

La solution

Comme vous l'avez remarqué, il y a des restrictions importantes sur la création d'une vue indexée. Les techniques qui pourraient vous aider ici, comme distincts ou une sous-requête sont interdits. Je pense que vous aurez besoin de sacrifier la matérialisation de la vue dans ce cas particulier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top