Comment formuler une vue indexée SQL Server qui agrège des valeurs distinctes?
-
02-10-2019 - |
Question
J'ai un schéma qui comprend des tables comme les suivantes (schéma pseudo):
TABLE ItemCollection {
ItemCollectionId
...etc...
}
TABLE Item {
ItemId,
ItemCollectionId,
ContributorId
}
Je dois agréger le nombre de cotisants distincts par ItemCollectionId. Ceci est possible avec une requête comme:
SELECT ItemCollectionId, COUNT(DISTINCT ContributorId) FROM Item
GROUP BY ItemCollectionId
Je veux plus d'effectuer une pré-calculer cette agrégation en utilisant une vue indexée (matérialisée). Les DISTINCTS un empêche d'index étant placé sur ce point de vue. Est-il possible de reformuler ce qui ne viole pas les contraintes de vue indexée de SQL Server?
La solution
Pas possible, apparemment.
Autres conseils
SELECT
ItemCollectionId,
COUNT(DISTINCT ContributorId),
COUNT_BIG(*) AS DummyColumn
FROM Item
GROUP BY ItemCollectionId
Un agrégat nécessitera COUNT_BIG (*) comme mentionné dans MSDN.
dit aussi « non DISTINCT » et je ne suis pas sûr (jamais essayé, désolé) si cela vaut pour l'utilisation de dans un agrégat (comme vous avez), ou SELECT DISTINCT...