Caramou
Dupont
Dupont
Dupont
François
François
Loupiot
Sunna
Vandenbush
En quoi cela nous intéresse-t-il ?
C'est très simple. Ici, nous n'avons que des noms assez courts. La colonne nom peut par exemple être de type VARCHAR(30).
Mais imaginez une colonne de type VARCHAR(150), qui contient des titres de livres par exemple. Si l'on met un index dessus,
MySQL va indexer jusqu'à 150 caractères. Or, il est fort probable que les 25-30 premiers caractères du titre suffisent à trier ceux-ci.
Au pire, un ou deux ne seront pas exactement à la bonne place, mais les requêtes en seraient déjà grandement accélérées.
Il serait donc plutôt pratique de dire à MySQL : "Indexe cette colonne, mais base-toi seulement sur les x premiers caractères". Et
c'est possible évidemment (sinon je ne vous en parlerais pas
), et c'est même très simple. Lorsque l'on créera l'index sur la
colonne titre_livre, il suffira d'indiquer un nombre entre parenthèses : titre_livre(25) par exemple. Ce nombre étant bien sûr le
nombre de caractères (dans le sens de la lecture, donc à partir de la gauche) à prendre en compte pour l'index.
Le fait d'utiliser ces index partiels sur des champs alphanumériques permet de gagner de la place (un index sur 150 lettres prend
évidemment plus de place qu'un index sur 20 lettres), et si la longueur est intelligemment définie, l'accélération permise par l'index
sera la même que si l'on avait pris la colonne entière.
Types BLOB et TEXT (et dérivés)
Si vous mettez un index sur une colonne de type BLOB ou TEXT (ou un de leurs dérivés), MySQL exige que vous précisiez un
nombre de caractères à prendre en compte. Et heureusement… Vu la longueur potentielle de ce que l'on stocke dans de telles
colonnes.
Les différents types d'index
En plus des index "simples", que je viens de vous décrire, il existe trois types d'index qui ont des propriétés particulières. Les
index UNIQUE, les index FULLTEXT, et enfin les index SPATIAL.
Je ne détaillerai pas les propriétés et utilisations des index SPATIAL. Sachez simplement qu'il s'agit d'un type d'index utilisé dans
des bases de données recensant des données spatiales (tiens donc !
), donc des points, des lignes, des polygones…
Sur ce, c'est parti !
Index UNIQUE
Avoir un index UNIQUE sur une colonne (ou plusieurs) permet de s'assurer que jamais vous n’insérerez deux fois la même valeur
(ou combinaison de valeurs) dans la table.
Par exemple, vous créez un site internet, et vous voulez le doter d'un espace membre. Chaque membre devra se connecter grâce à
un pseudo et un mot de passe. Vous avez donc une table Membre, qui contient 4 colonnes : id , pseudo, mot_de_passe et
date_inscription.
Deux membres peuvent avoir le même mot de passe, pas de problème. Par contre, que se passerait-il si deux membres avaient le
même pseudo ? Lors de la connexion, il serait impossible de savoir quel mot de passe utiliser et sur quel compte connecter le
membre.
Il faut donc absolument éviter que deux membres utilisent le même pseudo. Pour cela, on va utiliser un index UNIQUE sur la
colonne pseudo de la table Membre.
Autre exemple, dans notre table Animal cette fois. Histoire de ne pas confondre les animaux, vous prenez la décision de ne pas
nommer de la même manière deux animaux de la même espèce. Il peut donc n'y avoir qu'une seule tortue nommée Toto. Un chien
peut aussi se nommer Toto, mais un seul. La combinaison (espèce, nom) doit n'exister qu'une et une seule fois dans la table. Pour
Partie 2 : Index, jointures et sous-requêtes
75/414
www.openclassrooms.com
Dupont
Dupont
Dupont
François
François
Loupiot
Sunna
Vandenbush
En quoi cela nous intéresse-t-il ?
C'est très simple. Ici, nous n'avons que des noms assez courts. La colonne nom peut par exemple être de type VARCHAR(30).
Mais imaginez une colonne de type VARCHAR(150), qui contient des titres de livres par exemple. Si l'on met un index dessus,
MySQL va indexer jusqu'à 150 caractères. Or, il est fort probable que les 25-30 premiers caractères du titre suffisent à trier ceux-ci.
Au pire, un ou deux ne seront pas exactement à la bonne place, mais les requêtes en seraient déjà grandement accélérées.
Il serait donc plutôt pratique de dire à MySQL : "Indexe cette colonne, mais base-toi seulement sur les x premiers caractères". Et
c'est possible évidemment (sinon je ne vous en parlerais pas
), et c'est même très simple. Lorsque l'on créera l'index sur la
colonne titre_livre, il suffira d'indiquer un nombre entre parenthèses : titre_livre(25) par exemple. Ce nombre étant bien sûr le
nombre de caractères (dans le sens de la lecture, donc à partir de la gauche) à prendre en compte pour l'index.
Le fait d'utiliser ces index partiels sur des champs alphanumériques permet de gagner de la place (un index sur 150 lettres prend
évidemment plus de place qu'un index sur 20 lettres), et si la longueur est intelligemment définie, l'accélération permise par l'index
sera la même que si l'on avait pris la colonne entière.
Types BLOB et TEXT (et dérivés)
Si vous mettez un index sur une colonne de type BLOB ou TEXT (ou un de leurs dérivés), MySQL exige que vous précisiez un
nombre de caractères à prendre en compte. Et heureusement… Vu la longueur potentielle de ce que l'on stocke dans de telles
colonnes.
Les différents types d'index
En plus des index "simples", que je viens de vous décrire, il existe trois types d'index qui ont des propriétés particulières. Les
index UNIQUE, les index FULLTEXT, et enfin les index SPATIAL.
Je ne détaillerai pas les propriétés et utilisations des index SPATIAL. Sachez simplement qu'il s'agit d'un type d'index utilisé dans
des bases de données recensant des données spatiales (tiens donc !
), donc des points, des lignes, des polygones…
Sur ce, c'est parti !
Index UNIQUE
Avoir un index UNIQUE sur une colonne (ou plusieurs) permet de s'assurer que jamais vous n’insérerez deux fois la même valeur
(ou combinaison de valeurs) dans la table.
Par exemple, vous créez un site internet, et vous voulez le doter d'un espace membre. Chaque membre devra se connecter grâce à
un pseudo et un mot de passe. Vous avez donc une table Membre, qui contient 4 colonnes : id , pseudo, mot_de_passe et
date_inscription.
Deux membres peuvent avoir le même mot de passe, pas de problème. Par contre, que se passerait-il si deux membres avaient le
même pseudo ? Lors de la connexion, il serait impossible de savoir quel mot de passe utiliser et sur quel compte connecter le
membre.
Il faut donc absolument éviter que deux membres utilisent le même pseudo. Pour cela, on va utiliser un index UNIQUE sur la
colonne pseudo de la table Membre.
Autre exemple, dans notre table Animal cette fois. Histoire de ne pas confondre les animaux, vous prenez la décision de ne pas
nommer de la même manière deux animaux de la même espèce. Il peut donc n'y avoir qu'une seule tortue nommée Toto. Un chien
peut aussi se nommer Toto, mais un seul. La combinaison (espèce, nom) doit n'exister qu'une et une seule fois dans la table. Pour
Partie 2 : Index, jointures et sous-requêtes
75/414
www.openclassrooms.com
