Si le concept d'index fonctionnel est nouveau pour vous, vous pourriez être tenté d'indexer tout mais c'est en fait la dernière chose à faire. Chaque index nécessite une maintenance continue. Les index fonctionnels sont particulièrement problématiques car ils facilitent la création d'index redondants.
La recherche insensible à la casse
ci-dessus peut aussi être implémentée avec la fonction
LOWER
:
SELECT nom, prenom, numero_telephone
FROM employes
WHERE LOWER(nom) = LOWER('winand');
Un seul index ne peut pas supporter les deux méthodes permettant
d'ignorer la casse. Bien sûr, nous pourrions créer un deuxième index sur
LOWER(nom)
pour accélérer cette requête, mais cela
signifierait que la base de données doive maintenir deux index à chaque
requête insert
, update
et
delete
(voir aussi le Chapitre 8, « Modifier les données »). Pour qu'un seul index suffise,
vous devez utiliser la même fonction dans toute votre
application.
Astuce
Unifiez le chemin d'accès pour qu'un index puisse être utilisé par plusieurs requêtes.
Attention
Quelques fois, les ORM utilisent UPPER
et
LOWER
sans que le développeur en soit conscient. Par
exemple, Hibernate injecte
un LOWER
implicite pour faire des recherches
insensibles à la casse.
Astuce
Avoir toujours comme but d'indexer la donnée originale car elle est souvent l'information la plus utile à placer dans un index.