Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn Mysql không sử dụng chỉ mục khi có các biến trong WHERE

Lời giải thích khả dĩ nhất là cột nodo là kiểu dữ liệu ký tự và character_set_connection không khớp với bộ ký tự được chỉ định cho cột.

Nếu cột được xác định bằng latin1 bộ ký tự, hãy thử:

WHERE nodo = CONVERT(@sitio USING latin1)

Như một minh chứng, với utf8, đầu ra giải thích hiển thị không có chỉ mục nào:

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

Nhưng với latin1, đầu ra giải thích cho thấy chỉ mục có sẵn (và được sử dụng):

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. Chuẩn SQL nói gì về dấu ngoặc đơn trong câu lệnh SQL UNION / EXCEPT / INTERSECT?

  2. Làm thế nào để chèn nhiều hàng trong cơ sở dữ liệu mysql cùng một lúc với các câu lệnh đã chuẩn bị?

  3. PHP - MySQL - Xóa hàng

  4. MySqlCommand (). ExecuteReader (). GetString () không hoạt động

  5. MySQL DELETE FROM với truy vấn con là điều kiện