Lorsque vous créez un index sur une table, MySQL stocke cet index sous forme d'une structure particulière, contenant les
valeurs des colonnes impliquées dans l'index. Cette structure stocke les valeurs triées et permet d'accéder à chacune de manière
efficace et rapide. Petit schéma explicatif dans le cas d'un index sur l'id de la table Animal (je ne prends que les neuf premières
lignes pour ne pas surcharger).
Pour permettre une compréhension plus facile, je représente ici l'index sous forme de table. En réalité, par défaut,
MySQL stocke les index dans une structure de type "arbre" (l'index est alors de type BTREE). Le principe est
cependant le même.
Les données d'Animal ne sont pas stockées suivant un ordre intelligible pour nous. Par contre, l'index sur l'id est trié simplement
par ordre croissant. Cela permet de grandement accélérer toute recherche faite sur cet id .
Imaginons en effet, que nous voulions récupérer toutes les lignes dont l'id est inférieur ou égal à 5. Sans index, MyQSL doit
parcourir toutes les lignes une à une. Par contre, grâce à l'index, dès qu'il tombe sur la ligne dont l'id est 6, il sait qu'il peut
s'arrêter, puisque toutes les lignes suivantes auront un id supérieur ou égal à 6. Dans cet exemple, on ne gagne que quelques
lignes, mais imaginez une table contenant des milliers de lignes. Le gain de temps peut être assez considérable.
Par ailleurs, avec les id triés par ordre croissant, pour rechercher un id particulier, MySQL n'est pas obligé de simplement
parcourir les données ligne par ligne. Il peut utiliser des algorithmes de recherche puissants (comme la recherche dichotomique),
toujours afin d’accélérer la recherche.
Mais pourquoi ne pas simplement trier la table complète sur la base de la colonne id ? Pourquoi créer et stocker une structure
spécialement pour l'index ? Tout simplement parce qu'il peut y avoir plusieurs index sur une même table, et que l'ordre des lignes
pour chacun de ces index n'est pas nécessairement le même. Par exemple, nous pouvons créer un second index pour notre table
Animal, sur la colonne date_naissance.
Partie 2 : Index, jointures et sous-requêtes
71/414
www.openclassrooms.com
valeurs des colonnes impliquées dans l'index. Cette structure stocke les valeurs triées et permet d'accéder à chacune de manière
efficace et rapide. Petit schéma explicatif dans le cas d'un index sur l'id de la table Animal (je ne prends que les neuf premières
lignes pour ne pas surcharger).
Pour permettre une compréhension plus facile, je représente ici l'index sous forme de table. En réalité, par défaut,
MySQL stocke les index dans une structure de type "arbre" (l'index est alors de type BTREE). Le principe est
cependant le même.
Les données d'Animal ne sont pas stockées suivant un ordre intelligible pour nous. Par contre, l'index sur l'id est trié simplement
par ordre croissant. Cela permet de grandement accélérer toute recherche faite sur cet id .
Imaginons en effet, que nous voulions récupérer toutes les lignes dont l'id est inférieur ou égal à 5. Sans index, MyQSL doit
parcourir toutes les lignes une à une. Par contre, grâce à l'index, dès qu'il tombe sur la ligne dont l'id est 6, il sait qu'il peut
s'arrêter, puisque toutes les lignes suivantes auront un id supérieur ou égal à 6. Dans cet exemple, on ne gagne que quelques
lignes, mais imaginez une table contenant des milliers de lignes. Le gain de temps peut être assez considérable.
Par ailleurs, avec les id triés par ordre croissant, pour rechercher un id particulier, MySQL n'est pas obligé de simplement
parcourir les données ligne par ligne. Il peut utiliser des algorithmes de recherche puissants (comme la recherche dichotomique),
toujours afin d’accélérer la recherche.
Mais pourquoi ne pas simplement trier la table complète sur la base de la colonne id ? Pourquoi créer et stocker une structure
spécialement pour l'index ? Tout simplement parce qu'il peut y avoir plusieurs index sur une même table, et que l'ordre des lignes
pour chacun de ces index n'est pas nécessairement le même. Par exemple, nous pouvons créer un second index pour notre table
Animal, sur la colonne date_naissance.
Partie 2 : Index, jointures et sous-requêtes
71/414
www.openclassrooms.com
