sql >> Database >  >> RDS >> Mysql

Mysql-query gebruikt geen index als er variabelen zijn in WHERE

De meest waarschijnlijke verklaring is dat kolom nodo is karakter datatype, en character_set_connection komt niet overeen met de tekenset die is opgegeven voor de kolom.

Als de kolom is gedefinieerd met latin1 karakterset, probeer:

WHERE nodo = CONVERT(@sitio USING latin1)

Als demonstratie, met utf8, explain output toont geen index beschikbaar:

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

Maar met latin1, explain output laat zien dat index beschikbaar is (en wordt gebruikt):

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. Oracle Unicode-spooling

  2. MariaDB Backup &PostgreSQL in de cloud - ClusterControl Release 1.6.1

  3. Gegevens invoegen via een functie met tabelwaarde in SQL Server

  4. Kan een CONTAINS- of FREETEXT-predikaat niet gebruiken voor een tabel of geïndexeerde weergave omdat deze niet in volledige tekst is geïndexeerd