Dans la plupart des cas, vous pouvez mesurer la performance
d'une requête en comptant le nombre d'accès disques. Pour les
tables de petite taille, vous pouvez généralement obtenir une
seule lecture (car l'index est probablement en cache). Pour les
tables plus grandes, vous pouvez estimer que vous aurez besoin
de (en utilisant les index B-tree
) :
log(row_count) / log(index_block_length / 3 * 2 /
(index_length + data_pointer_length)) + 1
lectures
pour trouver une ligne.
Pour MySQL, un bloc d'index vaut généralement 1024 octets, et
le pointeur de données vaut 4 octets. Une table de 500,000 avec
un index de taille 3 (entier moyen) vous donnera
log(500,000)/log(1024/3*2/(3+4)) + 1
= 4
lectures.
Comme l'index ci-dessus vous serait de taille 500 000 * 7 * 3/2 = 5.2 Mo, (en supposant que les index des tampons sont remplit aux 2/3, ce qui est typique), vous aurez probablement l'essentiel de l'index en mémoire, et vous n'aurez alors besoin que de 1 ou 2 lectures pour lire le reste des lignes.
Pour les écritures, toutefois, vous aurez besoin de 4 lectures (comme ci-dessus), pour trouver la place du nouvel index, et normalement, deux autres lectures pour modifier l'index et la ligne.
Notez que le raisonnement ci-dessus n'indique pas que votre application va dégénérer en fonction du logarithme népérien! Tant que tout est mis en cache par l'OS ou le serveur SQL, les performances ne vont se réduire que marginalement, même si la table grossit beaucoup. Une fois que les données seront trop importantes pour être en cache, votre application va ralentir car le serveur devra faire des lectures sur le disque (ce qui va accroître le log). Pour éviter cela, augmentez le cache d'index au fur et à mesure que votre index grossit. See Section 7.5.2, « Réglage des paramètres du serveur ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.