2012-07-08 18 views
7

Encontré un caso curioso en la consulta SQL de MySQL con coincidencia de cadena de prefijos;un caso curioso para la consulta de mysql "como" xx '"

Creé una tabla como esta;

CREATE TABLE `EpgInfo` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) NULL NOT NULL DEFAUL '', 
    PRIMARY KEY (`id`), 
    KEY `title` (`title`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

Entonces, Inserté 1.000.000 de filas de datos para el título de la columna aleatorio que la longitud es de menos de 20.

utilizo 3 SQLs como este:

  • SQL # 1: select * from EpgInfo2 where title like "快" limit 1;
  • SQL # 2: select * from EpgInfo2 where title = "中" limit 1;
  • SQL # 3: select * from EpgInfo2 where title like "中" limit 1;

Y me encontré con que:

  • SQL # 1 cuesta 0,2 segundos.
  • SQL # 2 y SQL # 3 cuestan 0.0s. Utilicé el estado de mostrar como %handl% para encontrar el plan de consulta, encontré que SQL # 1 escanea todos los datos de índice, SQL # 2 y SQL # 3 no.

¿Por qué?

Respuesta

1

¿Cómo "lejos" en la tabla está "快" vs "中"?

Si se examinó "中" en la primera fila, entonces solo habría que examinar una fila para la segunda y la tercera consulta.

Si la otra era la última fila, habría que escanear toda la tabla.

+0

estos 3 sqls no tienen ningún resultado en mis datos – user1010434

2

Para ver cómo maneja las consultas MySQL, puede darte una pista.

Además, pruebe con otros caracteres. Tal vez MySQL está malinterpretando a uno de esos que tiene un signo de porcentaje en él.

Cuestiones relacionadas