Mysql
 sql >> Base de données >  >> RDS >> Mysql

La requête Mysql n'utilise pas l'index lorsqu'il y a des variables dans WHERE

L'explication la plus probable est que la colonne nodo est le type de données caractère et character_set_connection ne correspond pas au jeu de caractères spécifié pour la colonne.

Si la colonne est définie avec latin1 jeu de caractères, essayez :

WHERE nodo = CONVERT(@sitio USING latin1)

À titre de démonstration, avec utf8, la sortie d'explication ne montre aucun index disponible :

EXPLAIN SELECT t.* FROM mytable t WHERE t.foo = CONVERT(@foo USING utf8)
                                                                  ^^^^
id select_type table type possible_keys key    key_len ref    rows Extra        
-- ----------- ----- ---- ------------- ------ ------- ------ ---- -----------
 1 SIMPLE      t     ALL  (NULL)        (NULL) (NULL)  (NULL)    3 Using where

Mais avec latin1, la sortie d'explication montre que l'index est disponible (et est utilisé) :

EXPLAIN SELECT t.* FROM mytable t WHERE t.foo = CONVERT(@foo USING latin1)
                                                                  ^^^^^^    
id select_type table type possible_keys key    key_len ref    rows Extra        
-- ----------- ----- ---- ------------- ------ ------- ------ ---- -----------
 1  SIMPLE     t     ref  t_ix          t_ix   13      const     1 Using where