Aujourd’hui, je vais expliquer comment tirer avantage des index
avec certains types de requête.
Nous avons une table client avec un monstrueux index nommé “nom”
que voici: nom, prenom, entreprise, telephone. Nous
avons un champ de recherche dans une page Web qui nous permet de
trouver un client à partir de son prénom ou son nom.
On veut trouver une personne qui a le nom “Phil”:
SELECT SQL_NO_CACHE * FROM client
WHERE groupe = 1
AND ( nom LIKE 'phil%' OR prenom LIKE 'phil%')
---
(490 total, Query took 0.4523 sec)
(490 total, Query took 0.4511 sec)
(490 total, Query took 0.4879 sec)
(490 total, Query took 0.4455 sec)
Dans cette requête, aucun index n’est utilisé. À cause de la
condition OR, l’optimiseur estime qu’il est plus efficace de
faire un table scan que d’utiliser l’index nom, même si celui-ci
possède les champs …
[Lire plus]