Les bases de données ont beaucoup de jargon, et la cardinalité est l’un de ces mots que les personnes expérimentées ont tendance à oublier qu’elles ne connaissaient pas à une époque. Mais si vous ne le connaissez pas – et il faut un certain temps pour être vraiment à l’aise avec la cardinalité – c’est super déroutant quand le DBA le lâche au milieu d’une phrase sans ralentir ! N’ayez crainte : Comme on dit, je vous tiens.La cardinalité a deux significations dans les bases de données. Dans notre cas, l’une d’entre elles est beaucoup plus importante que l’autre. La définition de la cardinalité qui a le plus d’importance pour les performances des requêtes est la cardinalité des données. La définition de la cardinalité qui a le plus d’importance pour les performances des requêtes est la cardinalité des données, c’est-à-dire le nombre de valeurs distinctes contenues dans une colonne. Dans ce sens, la cardinalité signifie qu’une relation est de type one-to-one, many-to-one ou many-to-many. La définition officielle de la cardinalité dans le dictionnaire des bases de données est mathématique : le nombre de valeurs dans un ensemble. Lorsqu’elle est appliquée aux bases de données, sa signification est un peu différente : il s’agit du nombre de valeurs distinctes dans une colonne de table, par rapport au nombre de lignes de la table. Les valeurs répétées dans la colonne ne comptent pas.Cependant, nous ne parlons généralement pas de la cardinalité comme d’un nombre. Il est plus courant de parler simplement de cardinalité « élevée » et « faible ». Un grand nombre de valeurs distinctes est une cardinalité élevée ; un grand nombre de valeurs répétées est une cardinalité faible.Imaginez une table de description de produit dans une base de données de commerce électronique :La colonne ProductID
va avoir une cardinalité élevée parce que c’est probablement la clé primaire de cette table, donc elle est totalement unique. S’il y a mille lignes dans la table, il y aura mille valeurs ProductID
différentes. La colonne Category
aura beaucoup de répétitions, et sa cardinalité sera faible ou moyenne : peut-être 50 ou 100 valeurs Category
différentes. La colonne Name
a probablement une cardinalité élevée, à moins que cette table ne comporte plus de données qu’il n’y paraît (comme plusieurs lignes pour différentes couleurs de produits et autres variations).La cardinalité a un impact important sur les performances, car elle influence le plan d’exécution de la requête. Le planificateur examine les statistiques des colonnes et les utilise pour déterminer le nombre de valeurs qu’une requête est susceptible de faire correspondre, entre autres choses. En fonction de ce qu’il trouve, il peut utiliser différents plans d’exécution de requête pour essayer d’obtenir les meilleures performances. Mais c’est un sujet pour un autre article de blog, car il faut un peu de travail pour l’expliquer.Alors maintenant, la prochaine fois que quelqu’un lâche « cardinalité élevée » dans une phrase sans faire de pause, vous savez qu’ils veulent vraiment dire « beaucoup de valeurs différentes ». Et voilà, vous l’avez !