par Guillaume Lelarge.

Sur-indexation


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éve­loppeur 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.

À propos de l'auteur

Photo de Markus Winand

Markus Winand teaches efficient SQL—inhouse and online. He minimizes the development time using modern SQL and optimizes the runtime with smart indexing—for that he also published the book SQL Performance Explained.

“Use The Index, Luke!” by Markus Winand and translated by Guillaume Lelarge is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Mentions légales | Contact | NO WARRANTY | Marque déposée | Privacy | CC-BY-NC-ND 3.0 license