sql >> Databáze >  >> RDS >> Mysql

Mysql dotaz nepoužívá index, když jsou v WHERE proměnné

Nejpravděpodobnějším vysvětlením je sloupec nodo je datový typ znaku a character_set_connection neodpovídá znakové sadě určené pro sloupec.

Pokud je sloupec definován pomocí latin1 znaková sada, zkuste:

WHERE nodo = CONVERT(@sitio USING latin1)

Jako ukázka, s utf8, vysvětlující výstup neukazuje žádný dostupný index:

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

Ale s latin1, vysvětlující výstup ukazuje, že index je k dispozici (a používá se):

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. Co znamená dvojtečka:dělat v dotazu SQL?

  2. utf8 při importu do mysql zkomolený

  3. Jak zkontrolovat existenci dat dvou sloupců ve dvou různých tabulkách? MySQL

  4. Příklady ISJSON() v SQL Server (T-SQL)