Compter efficacement les valeurs DISTINCT dans plusieurs colonnes
Dans un scénario où vous devez déterminer le nombre de combinaisons uniques dans plusieurs colonnes, un problème commun L'approche consiste à utiliser une sous-requête avec la clause DISTINCT. Cependant, cette technique peut parfois s’avérer inefficace. Ici, nous explorons une méthode d'optimisation potentielle.
La requête fournie vise à compter les combinaisons distinctes "DocumentId" et "DocumentSessionId" de la table "DocumentOutputItems" :
SELECT COUNT(*) FROM (SELECT DISTINCT DocumentId, DocumentSessionId FROM DocumentOutputItems) AS internalQuery
Pour améliorer les performances, envisagez de générer une colonne calculée persistante basée sur un hachage ou une combinaison concaténée des colonnes en question. Une fois créée, cette colonne peut être indexée et avoir des statistiques associées, en supposant des paramètres de base de données appropriés.
En exploitant cette colonne calculée persistante, une opération de comptage DISTINCT sur le champ dérivé devrait donner un résultat équivalent à la requête d'origine. . Cette approche élimine le besoin d’une sous-requête et améliore potentiellement l’efficacité. Voici un exemple :
ALTER TABLE DocumentOutputItems ADD DocumentUniqueIndex AS HASHBYTES('MD5', DocumentId + DocumentSessionId) PERSISTED; SELECT COUNT(DISTINCT DocumentUniqueIndex) FROM DocumentOutputItems;
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!