sql >> Database teknologi >  >> RDS >> Mysql

Mysql-forespørgsel bruger ikke indeks, når der er variable i WHERE

Den mest sandsynlige forklaring er den kolonne nodo er karakterdatatype og character_set_connection stemmer ikke overens med det angivne tegnsæt for kolonnen.

Hvis kolonnen er defineret med latin1 tegnsæt, prøv:

WHERE nodo = CONVERT(@sitio USING latin1)

Som en demonstration, med utf8, forklar output viser intet indeks tilgængeligt:

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, forklar output viser, at indeks er tilgængeligt (og bruges):

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. Sjovt med Djangos nye Postgres-funktioner

  2. T-SQL split streng

  3. uinitialiseret konstant MysqlCompat::MysqlRes (ved hjælp af mms2r gem)

  4. MySQL:vælg 5 rækker før og efter specifik række