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!