5.4 Optimisation de la structure de la base de données
5 Optimisation de MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Conception . Rendre vos tables aussi compactes que possible . Comment MySQL utilise les index . Index de colonnes ->Index sur plusieurs colonnes . Pourquoi tant de tables ouvertes ? . Quand MySQL ouvre et ferme les tables . Inconvénients de la création d'un grand nombre de tables dans la même base de données
|
5.4.5 Index sur plusieurs colonnes
MySQL peut créer des index sur plusieurs colonnes. Un index peut comprendre
jusqu'à 15 colonnes. (sur les colonnes de type
CHAR
ou
VARCHAR
,
vous pouvez utiliser uniquement le début de la colonne pour l'indexation.)
Un index sur plusieurs colonnes peut être compris comme un tableau
trié contenant des valeurs créées par concaténation des valeurs des colonnes
indexées.
MySQL utilise les index sur plusieurs colonnes de telle sorte que les requêtes
sont accélérées quand on spécifie une quantité connue de la première colonne de
l'index dans un clause
WHERE
, même si on ne spécifie pas la valeur
des autres colonnes.
On suppose qu'une table est créée avec les paramètres suivant:
mysql> CREATE TABLE test ( -> id INT NOT NULL, -> nom CHAR(30) NOT NULL, -> prenom CHAR(30) NOT NULL, -> PRIMARY KEY (id), -> INDEX nom_index (nom,prenom));
|
Alors l'index
nom_index
est un index de
nom
et de
prenom
. Cela sera utile pour les requêtes qui spécifient des
valeurs dans une gamme donnée de
nom
, ou pour à la fois
nom
et
prenom
.
Ainsi l'index
nom_index
sera utilisé pour les requêtes suivantes:
mysql> SELECT * FROM test WHERE nom="Widenius"; mysql> SELECT * FROM test WHERE nom="Widenius" -> AND prenom="Michael"; mysql> SELECT * FROM test WHERE nom="Widenius" -> AND (prenom="Michael" OR prenom="Monty"); mysql> SELECT * FROM test WHERE nom="Widenius" -> AND prenom >="M" AND prenom < "N";
|
Cependant, l'index
nom_index
ne sera PAS utilisé pour les requêtes suivantes:
mysql> SELECT * FROM test WHERE prenom="Michael"; mysql> SELECT * FROM test WHERE nom="Widenius" -> OR prenom="Michael";
|
Pour plus d'informations sur la méthode de MySQL pour utiliser les index dans le
but d'améliorer les performance des requêtes, regardez Comment MySQL utilise les index .
|