Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/01/2014, 09:26
xorow
 
Fecha de Ingreso: febrero-2010
Mensajes: 45
Antigüedad: 14 años, 3 meses
Puntos: 1
Consulta con indices

Hola, estoy testeando una consulta en mysql y veo que se demora mas de lo que debería. La consulta es la siguiente:

Código SQL:
Ver original
  1. EXPLAIN SELECT HIGH_PRIORITY main.id, main.activado, ... FROM articulo main, articulo_detalle artd WHERE main.id=artd.id_articulo AND main.id_empresa='5523' AND main.referencia='06b63fa08a306564e8ea56574...' LIMIT 1

La cosa está así, la tabla contiene aproximadamente un millor y medio de referencias, para agilizar la consulta he creado un indice en el campo id_empresa y otro en el campo referencia pero solo con 8 digitos para no indexar todo el campo ya que es un varchar(60).

Lo que no llego a entender bien es que al ejecutarla con explain me devuelve rows: 197491. Es decir, ha tenido que escanear 197491 lineas para encontrarla. Sin embargo, si ejecuto la siguiente sentencia:

Código MySQL:
Ver original
  1. SELECT ...
  2. FROM  `articulo`
  3. WHERE  `referencia` LIKE  '06b63fa0%'

Es decir, hago la consulta con los primeros 8 digitos de la referencia, para ver cuantas coincidencias pueden haber con estos y me devuelve solamente 1 línea, con lo cual no llego a entender porque en la consulta anterior ha tenido que escanear tantas lineas si realmente el indice habría tenido que dar coincidencia con esa misma.