Mysql
 sql >> Database >  >> RDS >> Mysql

La query MySQL non utilizza l'indice quando sono presenti variabili in WHERE

La spiegazione più probabile è quella colonna nodo è il tipo di dati del carattere e character_set_connection non corrisponde al set di caratteri specificato per la colonna.

Se la colonna è definita con latin1 set di caratteri, prova:

WHERE nodo = CONVERT(@sitio USING latin1)

A titolo dimostrativo, con utf8, l'output di spiegazione non mostra alcun indice disponibile:

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

Ma con latin1, spiega che l'output mostra che l'indice è disponibile (e viene utilizzato):

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