Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Permintaan mysql tidak menggunakan indeks ketika ada variabel di WHERE

Penjelasan yang paling mungkin adalah kolom nodo adalah tipe data karakter, dan character_set_connection tidak cocok dengan set karakter yang ditentukan untuk kolom.

Jika kolom didefinisikan dengan latin1 set karakter, coba:

WHERE nodo = CONVERT(@sitio USING latin1)

Sebagai demonstrasi, dengan utf8, jelaskan keluaran menunjukkan tidak ada indeks yang tersedia:

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

Tetapi dengan latin1, jelaskan output menunjukkan indeks tersedia (dan digunakan):

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. Di MySQL:Bagaimana cara melewatkan nama tabel sebagai prosedur tersimpan dan/atau argumen fungsi?

  2. MySQL Select dan Pernyataan IF()

  3. Bagaimana cara memilih pasangan baris unik dari tabel secara acak?

  4. Konversikan skrip MySQL ke H2

  5. Bagaimana cara mendapatkan ID Variasi Woocommerce?