Si vous n'avez absolument aucune donnée sur votre problème, vous êtes obligé de faire une estimation.
La forme générale de cette formule est expliquée dans les commentaires :
- si nous n'utilisons qu'une seule colonne clé (
x
) d'un index multicolonne (avecc
colonnes), nous obtenonsa
rangées (1 % du nombre total de rangées). Donc pourx=1
, le résultat esta
par définition. - si nous connaissons la valeur de chaque colonne clé d'un index multicolonne, nous obtenons le nombre de lignes par clé entière (
b
); donc pourx=c
, on obtientb
lignes (qui est 1 ou 10 ) par définition. - entre les deux (si nous utilisons des valeurs-clés pour plus d'une colonne clé, mais pas toutes), pour chaque valeur-clé connue supplémentaire, nous pouvons exclure quelques lignes supplémentaires :nous avons
a-b
lignes qui n'appartiendront pas au cas où nous connaissons notre full clé (qui auraitb
rows), et par définition elles seront exclues proportionnellement au ratio de keycolumns utilisables ((x-1)/(c-1)
). - Le
-1
en(x-1)/(c-1)
est juste un décalage (vous pouvez simplement utiliser des noms de variables différents), car nous n'avons qu'à compter les supplémentaires colonnes, maisc
etx
est le nombre incluant la première colonne. (Dans une série temporelle, vous appelleriez le paramètre pour la première colonnet=0
, et le-1
fait exactement cela).
Donc en conclusion on obtient a - (a-b) * (x-1)/(c-1)
(a
pour la première colonne clé moins les lignes que nous excluons proportionnellement). C'est (si vous transformez un peu cette expression) exactement la formule donnée. Une vérification rapide :pour x=1
(x-1=0
), le deuxième terme est 0 et nous obtenons a
, tel que défini par la première condition ; pour x=c
, on obtient a-(a-b)=b
tel que défini par la deuxième condition.
Il n'est pas déraisonnable de faire cet ansatz en utilisant ces hypothèses, mais vous pouvez probablement trouver une formule différente qui a autant de sens. Affirmer que c'est mieux serait cependant une tâche plus difficile.
Reste ensuite à choisir les valeurs (b=10
et 1%
dans ce cas). Vous pouvez évidemment choisir n'importe quelle valeur. Pour faire cela sans aucune donnée fiable à l'exception d'une intuition, il existe un concept appelé estimation de Fermi :
Vous choisissez simplement l'ordre de grandeur (1, 1000000, 1/100) pour vos paramètres d'entrée, et vous obtenez un ordre de grandeur raisonnable pour votre résultat.
Alors, combien de lignes pensez-vous qu'une clé non unique couvrira ? C'est plus que 1, sinon vous en feriez une clé unique, mais est-ce plutôt 2, 10 ou 100 ? 10 est probablement une bonne estimation (il couvre une valeur d'environ 3 à 30 dans cette estimation). Ainsi, bien que ces chiffres puissent provenir d'une enquête mondiale de 2 ans sur la distribution des clés, les valeurs estimées en puissances de 10 sont généralement dérivées d'une manière comme celle-là. Si vous voulez être absolument certain, demandez au développeur.
Et le xkcd obligatoire pour ce genre de sujets :What-if ? Peindre la Terre