sql >> Databasteknik >  >> RDS >> Mysql

Mysql-frågan använder inte index när det finns variabler i WHERE

Den mest troliga förklaringen är kolumnen nodo är teckendatatyp och character_set_connection matchar inte teckenuppsättningen som anges för kolumnen.

Om kolumnen är definierad med latin1 teckenuppsättning, försök:

WHERE nodo = CONVERT(@sitio USING latin1)

Som en demonstration, med utf8, förklarar utdata inget index tillgängligt:

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

Men med latin1, förklara output visar att index är tillgängligt (och används):

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



  1. Android:onUpgrade anropar inte vid databasuppgradering

  2. mysql-fel:FEL 1018 (HY000):Kan inte läsa dir av '.' (fel:13)

  3. Använder row_to_json() med kapslade kopplingar

  4. Tips för att trimma prestanda för PostgreSQL