Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Die MySQL-Abfrage verwendet keinen Index, wenn es Variablen in WHERE gibt

Die wahrscheinlichste Erklärung ist diese Spalte nodo Zeichendatentyp ist, und character_set_connection stimmt nicht mit dem für die Spalte angegebenen Zeichensatz überein.

Wenn die Spalte mit latin1 definiert ist Zeichensatz, versuchen Sie:

WHERE nodo = CONVERT(@sitio USING latin1)

Zur Demonstration zeigt die EXPLAIN-Ausgabe mit utf8, dass kein Index verfügbar ist:

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

Aber mit latin1 zeigt die EXPLAIN-Ausgabe, dass der Index verfügbar ist (und verwendet wird):

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