Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

A consulta do MySQL não usa o índice quando há variáveis ​​em WHERE


A explicação mais provável é que a coluna nodo é o tipo de dados de caractere e character_set_connection não corresponde ao conjunto de caracteres especificado para a coluna.

Se a coluna estiver definida com latin1 conjunto de caracteres, tente:
WHERE nodo = CONVERT(@sitio USING latin1)

Como demonstração, com utf8, a saída de explicação não mostra nenhum índice disponível:
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

Mas com latin1, a saída de explicação mostra que o índice está disponível (e é usado):
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