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

[SOLUCIONADO] demora en ordenamiento

Estas en el tema de demora en ordenamiento en el foro de Mysql en Foros del Web. buen día. he estado realizando una consulta que realiza un join entre 4 tablas y ejecuta una función, el detalle es que cuando trato de ...
  #1 (permalink)  
Antiguo 08/07/2014, 09:46
 
Fecha de Ingreso: noviembre-2010
Ubicación: en las nubes
Mensajes: 56
Antigüedad: 13 años, 5 meses
Puntos: 3
Pregunta demora en ordenamiento

buen día.

he estado realizando una consulta que realiza un join entre 4 tablas y ejecuta una función, el detalle es que cuando trato de ordenar los resultados , por el valor obtenido de la funcion esta llega a demorar hasta 3 minutos.

la consulta es la siguiente
Código SQL:
Ver original
  1. SELECT cas.id,cas.tipo, socio, cliente, usu.nombre ,cas.monto,
  2. CASE cas.especial WHEN 0 THEN  eta.descripcion ELSE esp.descripcion END,
  3. getdia(2,cas.id,etapa,especial) AS dia
  4. FROM casos cas
  5. LEFT JOIN usuarios usu ON usu.id=cas.abogado
  6. LEFT JOIN especiales esp  ON esp.etapa =cas.especial
  7. LEFT JOIN normales eta  ON eta.etapa =cas.etapa AND cas.tipo=eta.tipo
  8. ORDER BY dia DESC

si no lo ordeno por DIA no demora en ejecutar,
cabe mencionar que tengo 17000 registros.

la pregunta es existe alguna forma de optimizar dicha consulta.
__________________
la mejor soluciones no es la mas complicada, si no con la mejor ingenio
  #2 (permalink)  
Antiguo 08/07/2014, 10:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: demora en ordenamiento

Cita:
la pregunta es existe alguna forma de optimizar dicha consulta.
Por lo pronto, creando in INDEX sobre ese campo.
La pregunta que cabe es si está bien definido...
¿Es un DATE o DATETIME, no?

Por otro lado, no existe el GETDIA() en MySQL, por lo que no sé qué es lo que hace, ni donde lo definiste.
Además, no te recomiendo usar CASE para una opcion po relse simple:

Código MySQL:
Ver original
  1.     cas.id,
  2.     cas.tipo,
  3.     socio,
  4.     cliente,
  5.     usu.nombre ,
  6.     cas.monto,
  7.     IF(cas.especial = 0, eta.descripcion, esp.descripcion) descripcion,
  8.     getdia(2,cas.id, etapa, especial) dia
  9. FROM casos cas
  10.     LEFT JOIN usuarios usu ON usu.id=cas.abogado
  11.     LEFT JOIN especiales esp  ON esp.etapa =cas.especial
  12.     LEFT JOIN normales eta  ON eta.etapa = cas.etapa AND cas.tipo=eta.tipo
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: funciones, function, view, vistas
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:59.