Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie Mysql nie używa indeksu, gdy istnieją zmienne w WHERE

Najbardziej prawdopodobnym wyjaśnieniem jest to, że kolumna nodo to znakowy typ danych, a character_set_connection nie pasuje do zestawu znaków określonego dla kolumny.

Jeśli kolumna jest zdefiniowana za pomocą latin1 zestaw znaków, spróbuj:

WHERE nodo = CONVERT(@sitio USING latin1)

W ramach demonstracji, z utf8, wyjaśnij wyjście pokazuje brak dostępnego indeksu:

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 w przypadku latin1 wyjaśnij, że dane wyjściowe pokazują, że indeks jest dostępny (i jest używany):

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak testować transakcje MySQL?

  2. szkody wtrysku mysql?

  3. Błąd MySQL:lista SELECT nie znajduje się w klauzuli GROUP BY

  4. Ładowanie znaczników z pliku XML do Google Map API

  5. Błąd podczas ładowania modułu MySQLdb i instalacji pip MySQLdb