Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql заявката не използва индекс, когато има променливи в WHERE

Най-вероятното обяснение е тази колона nodo е символен тип данни и character_set_connection не съответства на набора от знаци, посочен за колоната.

Ако колоната е дефинирана с latin1 набор от символи, опитайте:

WHERE nodo = CONVERT(@sitio USING latin1)

Като демонстрация, с utf8, обясни изходът показва, че няма наличен индекс:

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

Но с latin1, обясни изходът показва, че индексът е наличен (и се използва):

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. Laravel - многократно вмъкване на редове и извличане на идентификатори

  2. aws - ec2 - mysql - спиране на екземпляра, рестартиране - паролите на други потребители са променени

  3. Автоматично преобразуване на SQL заявка в ElasticSearch заявка

  4. Как да INNER JOIN 3 таблици с помощта на CodeIgniter

  5. Получаване на процент от Count(*) към броя на всички елементи в GROUP BY