sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué MySQL no usa ninguna de estas posibles claves?

Otro problema que puede encontrar es una falta de coincidencia del tipo de datos. Por ejemplo, si su columna es un tipo de datos de cadena (CHAR, por ejemplo) y su consulta no cita un número, entonces MySQL no usará el índice.

SELECT * FROM tbl WHERE col = 12345; # No index
SELECT * FROM tbl WHERE col = '12345'; # Index

Fuente:acabo de luchar contra este mismo problema hoy y aprendí de la manera más difícil en MySQL 5.1. :)

Editar:Información adicional para verificar esto:

mysql> desc das_table \G
*************************** 1. row ***************************
  Field: das_column
   Type: varchar(32)
   Null: NO
    Key: PRI
Default: 
  Extra: 
*************************** 2. row ***************************
[SNIP!]

mysql> explain select * from das_table where das_column = 189017 \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: das_column
         type: ALL
possible_keys: PRIMARY
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 874282
        Extra: Using where
1 row in set (0.00 sec)

mysql> explain select * from das_table where das_column = '189017' \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: das_column
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 34
          ref: const
         rows: 1
        Extra: 
1 row in set (0.00 sec)