Maison >base de données >tutoriel mysql >Comment puis-je compter efficacement les combinaisons uniques sur plusieurs colonnes d'une table de base de données ?

Comment puis-je compter efficacement les combinaisons uniques sur plusieurs colonnes d'une table de base de données ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 21:48:40615parcourir

How Can I Efficiently Count Unique Combinations Across Multiple Columns in a Database Table?

Comptage des valeurs uniques sur plusieurs colonnes : alternatives aux sous-requêtes

Lorsque vous êtes confronté à la tâche de compter les valeurs uniques d'une table basée sur plusieurs colonnes, telles que DocumentId et DocumentSessionId , la tendance naturelle est d’utiliser une approche de sous-requête. Cependant, cela peut soulever des problèmes d'optimisation des performances.

Une alternative à l'utilisation d'une sous-requête consiste à créer une colonne calculée persistante. Ceci peut être réalisé en hachant ou en concaténant les colonnes souhaitées, garantissant un résultat déterministe qui peut être indexé et sur lequel des statistiques sont construites.

Par exemple, si les colonnes en question sont DocumentId et DocumentSessionId, une colonne calculée nommée HashValue peut être créé à l'aide d'une fonction de hachage telle que SHA1 ou MD5 :

ALTER TABLE DocumentOutputItems ADD COLUMN HashValue AS SHA1(DocumentId + DocumentSessionId);

Une fois la colonne calculée persistant et indexé, un décompte distinct sur cette colonne sera équivalent au résultat souhaité :

SELECT COUNT(DISTINCT HashValue) FROM DocumentOutputItems;

En utilisant une colonne calculée persistante, vous pouvez tirer parti de l'indexation et des statistiques pour améliorer les performances, éliminant ainsi le besoin d'une sous-requête .

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