Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Optimizar Consulta (eliminar Filesort)

Estas en el tema de Optimizar Consulta (eliminar Filesort) en el foro de Mysql en Foros del Web. EXPLAIN SELECT ID_CLIENTE, APE_CLIENTE_1, NOM_CLIENTE_1, DIR_CLIENTE, NAP, TELEFONO_CLIENTE, LOCALIDAD, NACIONALIDAD, VENDEDORA FROM cliente WHERE ESTADO_CLIENTE ='a' ORDER BY APE_CLIENTE_1, NOM_CLIENTE_1 id select_type table type possible_keys ...
  #1 (permalink)  
Antiguo 27/10/2008, 14:19
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 18 años, 5 meses
Puntos: 4
Optimizar Consulta (eliminar Filesort)

EXPLAIN SELECT ID_CLIENTE, APE_CLIENTE_1, NOM_CLIENTE_1, DIR_CLIENTE, NAP, TELEFONO_CLIENTE, LOCALIDAD, NACIONALIDAD, VENDEDORA FROM cliente WHERE ESTADO_CLIENTE ='a' ORDER BY APE_CLIENTE_1, NOM_CLIENTE_1


id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE cliente ref ESTADO_CLIENTE ESTADO_CLIENTE 5 const 1049 Using where; Using filesort

Segun lei si aparece filesort es harto negativo, estuve tratando de eliminarlo pero solo desaparece si elimino el ORDER BY.

Alguna idea, gracias.
  #2 (permalink)  
Antiguo 27/10/2008, 14:31
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 9 meses
Puntos: 45
Respuesta: Optimizar Consulta (eliminar Filesort)

prueba convirtiendo a ESTADO_CLIENTE en un índice

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 28/10/2008, 13:56
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 18 años, 5 meses
Puntos: 4
Respuesta: Optimizar Consulta (eliminar Filesort)

Gracias pero eso ya esta echo.
  #4 (permalink)  
Antiguo 28/10/2008, 15:07
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 11 meses
Puntos: 53
Respuesta: Optimizar Consulta (eliminar Filesort)

Cita:
Iniciado por Highlander Ver Mensaje
EXPLAIN SELECT ID_CLIENTE, APE_CLIENTE_1, NOM_CLIENTE_1, DIR_CLIENTE, NAP, TELEFONO_CLIENTE, LOCALIDAD, NACIONALIDAD, VENDEDORA FROM cliente WHERE ESTADO_CLIENTE ='a' ORDER BY APE_CLIENTE_1, NOM_CLIENTE_1


id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE cliente ref ESTADO_CLIENTE ESTADO_CLIENTE 5 const 1049 Using where; Using filesort

Segun lei si aparece filesort es harto negativo, estuve tratando de eliminarlo pero solo desaparece si elimino el ORDER BY.

Alguna idea, gracias.
en que cuantos registros te devuelve?, es mucha la cantidad, te serviría paginar los resultados?

nos vemos..
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #5 (permalink)  
Antiguo 28/10/2008, 15:51
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 9 meses
Puntos: 45
Respuesta: Optimizar Consulta (eliminar Filesort)

Cual es la estructura exacta de tu tabla?
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #6 (permalink)  
Antiguo 28/10/2008, 18:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Optimizar Consulta (eliminar Filesort)

Cita:
Iniciado por Highlander Ver Mensaje
EXPLAIN SELECT ID_CLIENTE, APE_CLIENTE_1, NOM_CLIENTE_1, DIR_CLIENTE, NAP, TELEFONO_CLIENTE, LOCALIDAD, NACIONALIDAD, VENDEDORA FROM cliente WHERE ESTADO_CLIENTE ='a' ORDER BY APE_CLIENTE_1, NOM_CLIENTE_1


id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE cliente ref ESTADO_CLIENTE ESTADO_CLIENTE 5 const 1049 Using where; Using filesort

Segun lei si aparece filesort es harto negativo, estuve tratando de eliminarlo pero solo desaparece si elimino el ORDER BY.

Alguna idea, gracias.
El filesort no lo vas a poder eliminar sin eliminar el ORDER BY porque precisamente lo que le estás diciendo es que lo ordene... Es obvio que aparecerá.
La aparición de un filesort no es a priori algo negativo porque sí. Es negativo según el contexto en que aparezca y la cantidad de registros involucrados.
Si le indico a MySQL que me seleccione un X conjunto a través de un grupo de consultas anidadas, y a la selección final de 10 ó 100 registros le pido que los ordene, ¿qué importa? El tiempo de ordenamiento es casi inexistente en un conjunto tan pequeño.
Pero si la subconsulta de nivel 3 entre 8 niveles me está devolviendo 16.000.000 de registros tiene un ORDER BY, un filesort es catastrófico por la cantidad de tiempo de proceso involucrado.
Entonces: El problema que debes resolver no es que deje de existir el filesort en cuestión, sino que en el momento de invocarlo, el conjunto de datos seleccionado se haya reducido lo suficiente como para que el ORDER BY no produzca una reducción de la performance de la consulta.
Por citar un ejemplo, una consulta que tengo definida para listar los conductores y vehículos que prestaron servicios (380 y 265 respectivamente), involucra el barrido de alrededor de 53.000.000 registros, de los que quedan aproximadamente medio millar y algo como resumen de servicios y sólo tiene un ORDER BY: al final. En ese contexto, la consulta tarda aproximadamente 48 segundos en realizarse, según hemos probado, incluyendo el almacenamiento de todos los registros. Si le quito el ORDER BY la consulta tarda aproximadamente 47 segundos... El problema, obviamente no está en el filesort, sino en la complejidad de la información leída.
¿Cómo pulimos esa consulta? Aprovechando que si la información está contenida en las claves de un índice, MySQL no lee la tabla, así que tres índices contienen en realidad el 70% de la información que se requiere, y con ello redujimos enormemente el problema.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/10/2008, 13:53
Avatar de Highlander  
Fecha de Ingreso: junio-2006
Ubicación: Concepción, Chile
Mensajes: 475
Antigüedad: 18 años, 5 meses
Puntos: 4
Respuesta: Optimizar Consulta (eliminar Filesort)

Entiendo, bueno me entrega 2000 resultados y demora unos 4 seg jeje queria que fuera mas rapida.

Yo lo veia como un tema a futuro porque esa cantidad de registros subira hasta llegar a 60.000 segun me dijeron.

Código:
 ID_CLIENTE int(20)   No  auto_increment               
  APE_CLIENTE_1 varchar(25) utf8_unicode_ci  Sí NULL                
  NOM_CLIENTE_1 varchar(25) utf8_unicode_ci  Sí NULL                
  APE_CLIENTE_2 varchar(25) utf8_unicode_ci  Sí NULL                
  NOM_CLIENTE_2 varchar(25) utf8_unicode_ci  Sí NULL                
  FECHAN_CLIENTE_1 date   Sí NULL                
  FECHAN_CLIENTE_2 date   Sí NULL                
  NATEL_1 varchar(15) utf8_unicode_ci  Sí NULL                
  NATEL_2 varchar(15) utf8_unicode_ci  Sí NULL                
  VENDEDORA int(11)   Sí NULL                
  DIR_CLIENTE varchar(25) utf8_unicode_ci  Sí NULL                
  N_CLIENTE varchar(10) utf8_unicode_ci  Sí NULL                
  NAP int(10)   Sí NULL                
  LOCALIDAD varchar(25) utf8_unicode_ci  Sí NULL                
  TELEFONO_CLIENTE varchar(15) utf8_unicode_ci  Sí NULL                
  EL tinyint(1)   Sí NULL                
  ELLA tinyint(1)   Sí NULL                
  HIJO_1 varchar(45) utf8_unicode_ci  Sí NULL                
  FECHAN_HIJO_1 date   Sí NULL                
  HIJO_2 varchar(45) utf8_unicode_ci  Sí NULL                
  FECHAN_HIJO_2 date   Sí NULL                
  HIJO_3 varchar(45) utf8_unicode_ci  Sí NULL                
  FECHAN_HIJO_3 date   Sí NULL                
  HIJO_4 varchar(45) utf8_unicode_ci  Sí NULL                
  FECHAN_HIJO_4 date   Sí NULL                
  CLIENTE_CASA_BELLA varchar(25) utf8_unicode_ci  Sí NULL                
  NACIONALIDAD int(11)   Sí NULL                
  HORARIO varchar(25) utf8_unicode_ci  Sí NULL                
  EMAIL varchar(40) utf8_unicode_ci  Sí NULL                
  ID_CAMA tinyint(1)   Sí NULL                
  INDESEADO tinyint(1)   Sí NULL                
  OBSERVACION varchar(150) utf8_unicode_ci  Sí NULL                
  ESTADO_CLIENTE varchar(1) utf8_unicode_ci  No
Incluye un indice para el ESTADO_CLIENTE.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:01.