Maison >base de données >tutoriel mysql >Comment puis-je compter efficacement les combinaisons distinctes sur plusieurs colonnes dans SQL ?

Comment puis-je compter efficacement les combinaisons distinctes sur plusieurs colonnes dans SQL ?

DDD
DDDoriginal
2025-01-06 01:00:39703parcourir

How Can I Efficiently Count Distinct Combinations Across Multiple Columns in SQL?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn