samedi 14 août 2010
sam
14
aoû '10
Recherche sur un champs indexé, qui n'utilise pas l'index
Dans la rubrique Mysql
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.


-
-





