Si vous ne disposez que d'une ligne dans le tableau, la cardinalité de l'index doit être de 1, bien sûr. C'est juste en comptant le nombre de valeurs uniques.
Si vous considérez un index comme une table de recherche basée sur des compartiments (comme un hachage), alors la cardinalité est le nombre de compartiments.
Voici comment cela fonctionne: Lorsque vous créez un index sur un ensemble de colonnes (a,b,c,d)
, la base de données parcourt toutes les lignes de la table, en regardant les quadruplés ordonnés de ces 4 colonnes, pour chaque ligne. Disons que votre table ressemble à ceci:
a b c d e
-- -- -- -- --
1 1 1 1 200
1 1 1 1 300
1 2 1 1 200
1 3 1 1 200
Alors, que la base de données regarde est seulement les 4 colonnes (a, b, c, d):
a b c d
-- -- -- --
1 1 1 1
1 2 1 1
1 3 1 1
Voir qu'il ya seulement trois uniques rangées à gauche? Ceux-ci deviendront nos seaux, mais nous y reviendrons. En réalité, il existe également un identifiant d'enregistrement ou un identifiant de ligne pour chaque ligne de la table. Donc, notre table originale ressemble à ceci:
(row id) a b c d e
-------- -- -- -- -- --
00000001 1 1 1 1 200
00000002 1 1 1 1 300
00000003 1 2 1 1 200
00000004 1 3 1 1 200
Alors quand on regarde seulement les 4 colonnes (a, b, c, d), nous sommes vraiment aussi à l'ID de ligne:
(row id) a b c d
-------- -- -- -- --
00000001 1 1 1 1
00000002 1 1 1 1
00000003 1 2 1 1
00000004 1 3 1 1
Mais nous voulons faire lookup (a, b, c, d) et non par identifiant de ligne, donc nous produisons quelque chose comme ceci:
(a,b,c,d) (row id)
--------- --------
1,1,1,1 00000001
1,1,1,1 00000002
1,2,1,1 00000003
1,3,1,1 00000004
et enfin, nous regroupons toutes les lignes ids de lignes qui ont des valeurs d'identité (a, b, c, d) ensemble:
(a,b,c,d) (row id)
--------- ---------------------
1,1,1,1 00000001 and 00000002
1,2,1,1 00000003
1,3,1,1 00000004
Voir cela? Les valeurs de (a, b, c, d), qui sont (1,1,1,1) (1,2,1,1) et (1,3,1,1) sont devenues des clés pour notre table de recherche dans les rangées de la table d'origine. En réalité, rien de tout cela ne se passe réellement, mais cela devrait vous donner une bonne idée de la façon dont une implémentation "naïve" (c'est-à-dire directe) d'un index pourrait être effectuée. Mais la ligne de fond est la suivante: la cardinalité mesure juste combien de lignes uniques il y a dans un index. Et dans notre exemple c'était le nombre de clés dans notre table de recherche, qui était 3.
Espérons que ça aide!
Merci pour les informations d'index. Très bien expliqué. La cardinalité de mon index devrait être plus de 1 étant donné qu'il y a 30000 lignes et presque tous les membres ont un nom différent? – Tom
Merci pour l'explication sur les index, c'était très bien, mais votre explication n'a pas répondu à la question ci-dessus. –
Vous avez raison, je n'ai pas dit explicitement la conclusion finale: je viens de montrer que 4 rangs tombent dans 3 seaux. Je suis sûr que vous pourriez inventer une autre ligne qui pourrait être ajoutée à l'une des trois catégories existantes de l'indice. Cela laisserait le nombre de compartiments inchangé, ce qui signifierait également que la cardinalité de l'indice était inchangée. Désolé pour ça. – scraimer