Les index peuvent jouer un rôle important dans l'optimisation des requêtes et la recherche rapide des résultats à partir des tables. Il est donc très important de sélectionner les colonnes à indexer. Il existe deux endroits principaux où nous pouvons envisager l'indexation: les colonnes référencées dans la clause WHERE et les colonnes utilisées dans les clauses JOIN. En bref, ces colonnes doivent être indexées par rapport auxquelles vous devez rechercher des enregistrements particuliers. Supposons que nous ayons une table nommée acheteurs où la requête SELECT utilise des index comme ci-dessous:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
Puisque "acheteur_id" est référencé dans la partie SELECT, MySQL ne l'utilisera pas pour limiter les lignes choisies. Par conséquent, il n'est pas nécessaire de l'indexer. Ci-dessous est un autre exemple peu différent de celui ci-dessus:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
Selon les requêtes ci-dessus first_name, les colonnes last_name peuvent être indexées car elles se trouvent dans la clause WHERE. Un champ supplémentaire, country_id de la table country, peut également être pris en compte pour l'indexation car il se trouve dans une clause JOIN. L'indexation peut donc être envisagée sur chaque champ de la clause WHERE ou d'une clause JOIN.
La liste suivante propose également quelques conseils que vous devez toujours garder à l'esprit lorsque vous avez l'intention de créer des index dans vos tables:
- Indexez uniquement les colonnes requises dans les clauses WHERE et ORDER BY. L'indexation des colonnes en abondance entraînera certains inconvénients.
- Essayez de profiter de la fonctionnalité "préfixe d'index" ou "index multi-colonnes" de MySQL. Si vous créez un index tel que INDEX (prénom, nom), ne créez pas INDEX (prénom). Cependant, "préfixe d'index" ou "index multi-colonnes" n'est pas recommandé dans tous les cas de recherche.
- Utilisez l'attribut NOT NULL pour les colonnes dans lesquelles vous envisagez l'indexation, afin que les valeurs NULL ne soient jamais stockées.
- Utilisez l'option --log-long-format pour consigner les requêtes qui n'utilisent pas d'index. De cette manière, vous pouvez examiner ce fichier journal et ajuster vos requêtes en conséquence.
- L'instruction EXPLAIN vous aide à révéler comment MySQL exécutera une requête. Il montre comment et dans quel ordre les tables sont jointes. Cela peut être très utile pour déterminer comment écrire des requêtes optimisées et si les colonnes doivent être indexées.
Mise à jour (23 février 15):
Tout index (bon / mauvais) augmente le temps d'insertion et de mise à jour.
En fonction de vos index (nombre d'index et type), le résultat est recherché. Si votre temps de recherche augmente à cause de l'index, c'est un mauvais index.
Probablement dans n'importe quel livre, "Page d'index" peut avoir une page de début de chapitre, un numéro de page de sujet commence, ainsi qu'une page de sous-sujet. Certaines clarifications dans la page d'index sont utiles, mais un index plus détaillé peut vous dérouter ou vous effrayer. Les index ont également de la mémoire.
La sélection d'index doit être judicieuse. Gardez à l'esprit que toutes les colonnes ne nécessitent pas d'index.