sam
14
aoû '10
Petite anti-astuce :Utiliser des fonctions dans les conditions sur un champs indexé, annule l'utilisation de l'index
mysql> EXPLAIN SELECT * FROM film WHERE title LIKE 'Tr%'\\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: film type: range possible_keys: idx_title key: idx_title key_len: 767 ref: NULL rows: 15 Extra: Using where
Une stratégie d'accès rapide à un range est choisi par l'optimiseur, et l'index sur le titre est utilisé pour réduire la quantité d'enregistrements à examiner (ici 15)
mysql> EXPLAIN SELECT * FROM film WHERE LEFT(title,2) = 'Tr' \\G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: film type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 951 Extra: Using where
Une analyse complète des enregistrement, donc lente, (c'est la stratégie d'accès ALL) est utilisée car une fonction (LEFT) opére sur la colonne de titre dans la condition.








Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire