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

Query demasiado lento (23hs)

Estas en el tema de Query demasiado lento (23hs) en el foro de Mysql en Foros del Web. Hola: Estuve un ben rato haciendo este query, y no devuelve errores, pero al correrlo queda corriendo sin devolver errores. lo deje corriendo 23 horas, ...
  #1 (permalink)  
Antiguo 21/12/2012, 10:05
 
Fecha de Ingreso: diciembre-2012
Mensajes: 1
Antigüedad: 11 años, 11 meses
Puntos: 0
Query demasiado lento (23hs)

Hola:
Estuve un ben rato haciendo este query, y no devuelve errores, pero al correrlo queda corriendo sin devolver errores. lo deje corriendo 23 horas, y no me devolvio ni una fila. el query tiene varios joins, pero ya hice otros mas largos, y no tuve este problema
Aca va el query

Código MySQL:
Ver original
  1. P.apellido
  2. , P.nombre
  3. , CONCAT(P.apellido,", ",P.nombre) AS apellido_nombre
  4. , TDOC.tipo_documento
  5. , P.numero_documento
  6. , P.sexo
  7. , P.cuil
  8. , CONCAT(DOM.calle,IFNULL(DOM.numero,''),IFNULL(DOM.piso,''),IFNULL(DOM.dpto,''),IFNULL(DOM.adicional,''),IFNULL(DOM.codigo_postal,'')) AS domicilio_personal
  9. , LOCP.localidad AS localidad_particular
  10. , PARTP.partido AS partido_particular
  11. , PROVP.provincia AS provincia_particular
  12. , PAP.pais AS pais_particular
  13. WHEN (MONTH(P.fecha_nacimiento) < MONTH(CURRENT_DATE)) THEN YEAR(CURRENT_DATE) - YEAR(P.fecha_nacimiento)
  14. WHEN (MONTH(P.fecha_nacimiento) = MONTH(CURRENT_DATE)) AND (DAY(P.fecha_nacimiento) <= DAY(CURRENT_DATE)) THEN YEAR(CURRENT_DATE) - YEAR(P.fecha_nacimiento)
  15. ELSE (YEAR(CURRENT_DATE) - YEAR(P.fecha_nacimiento)) - 1
  16. END AS edad
  17. ,P.fecha_nacimiento
  18.  
  19. ,CO.denominacion
  20. , C.comision
  21. , 'BECAS' as tipo_comision
  22. ,PUNT.orden_merito
  23. , CA_D.recomendacion AS ca_d_recomendacion
  24. -- ,TD.tipo_decision AS Directorio
  25. ,IF(LIME.tope_edad < YEAR( FROM_DAYS(TO_DAYS(CO.fecha_desde)-TO_DAYS(P.fecha_nacimiento))), 'CON EXCEPCION' , NULL) AS excepcion_por_edad
  26.  
  27. ,P.telefono_personal AS telefono_part
  28. ,CONCAT(IFNULL(LT.telefono_pais,''),"-",IFNULL(LT.telefono_area,''),"-", IFNULL(LT.telefono_caracteristica,''),"-",LT.telefono_numero," int ",IFNULL(LT.telefono_interno,'')) AS telefono_Lab
  29. ,P.email_personal AS email_personal
  30. ,LT.email AS 'email-lab'
  31. /* ,PCE.dato AS PCEDATO
  32. ,PCT.dato AS PCTTDATO*/
  33.  
  34. , GA.gran_area AS GRAN_AREA
  35. , DIS.disciplina AS DIS_PRI
  36. , DIS2.disciplina AS DIS_SEC
  37. , DISDES.disciplina_desagregada AS DIS_DESAGREGADA
  38. , DISDES.codigo AS DIS_DESAGREGADA_COD
  39. , DISDES2.disciplina_desagregada AS DIS_DESAGREGADA_SEC
  40. , DISDES2.codigo AS DIS_DESAGREGADA_SEC_COD
  41.  
  42. , org.unidad AS Lugar_trabajo
  43. , UO1.unidad AS nivel_1
  44. , UO2.unidad AS nivel_2
  45. , UO3.unidad AS nivel_3
  46. , UO4.unidad AS nivel_4
  47. , LOC.localidad AS LOCALIDAD_LT
  48. , PART.partido AS PARTIDO_LT
  49. , PROV.provincia AS PROVINCIA_LT
  50. , PROV.codigo AS COD_PROVINCIA_LT
  51. , PA. pais AS PAIS_LT
  52. , PA. codigo_pais AS COD_PAIS_LT
  53.  
  54. , E.estado AS estado_tramite
  55.  
  56.  
  57. FROM PERSONA P
  58. INNER JOIN TIPO_DOCUMENTO TDOC ON (P.tipo_documento_tk=TDOC.tk)
  59. LEFT JOIN DOMICILIO DOM ON (DOM.persona_tk=P.tk)
  60. LEFT JOIN PAIS PAP ON (PAP.tk=DOM.pais_tk)
  61. LEFT JOIN LOCALIDAD LOCP ON (LOCP.tk=DOM.localidad_tk)
  62. LEFT JOIN PARTIDO PARTP ON (LOCP.partido_tk=PARTP.tk)
  63. LEFT JOIN PROVINCIA PROVP ON (PARTP.provincia_tk=PROVP.tk)
  64.  
  65. INNER JOIN TRAMITE T ON (P.propietario_tk=T.propietario_tk)
  66. LEFT JOIN ESTADO E ON (E.tk = T.estado_tk)
  67. INNER JOIN LUGAR_TRABAJO_TRAMITE LTT ON (T.tk = LTT.tramite_tk)
  68. INNER JOIN LUGAR_TRABAJO LT ON (LTT.lugar_trabajo_tk = LT.tk)
  69. INNER JOIN CONVOCATORIA CO ON (CO.tk = T.convocatoria_tk)
  70. INNER JOIN COMISION_TRAMITE CT ON (T.tk = CT.tramite_tk)
  71. INNER JOIN COMISION C ON (CT.comision_tk = C.tk AND C.tipo_comision_tk=4)
  72. LEFT JOIN OBJETO_EVALUACION OBJE ON CO.objeto_evaluacion_tk=OBJE.tk
  73. LEFT JOIN LIMITE_EDAD LIME ON LIME.objeto_evaluacion_tk=OBJE.tk
  74.  
  75. LEFT JOIN ORDEN_MERITO_TRAMITE PUNT ON (PUNT.tramite_tk = T.tk)
  76.  
  77. CT.tramite_tk
  78. , CD.tk AS comision_dictamen_tk
  79. , CD.tipo_dictamen_tk
  80. WHEN CD.tipo_recomendacion_tk = 14
  81. THEN 'RECO.'
  82. WHEN CD.tipo_recomendacion_tk = 13
  83. THEN 'NO RECO.'
  84. ELSE ''
  85. END AS recomendacion ,
  86. CD.tipo_recomendacion_tk
  87. FROM TRAMITE T
  88. INNER JOIN COMISION_TRAMITE CT ON (T.tk = CT.tramite_tk)
  89. INNER JOIN COMISION C ON (CT.comision_tk = C.tk)
  90. LEFT JOIN COMISION_DICTAMEN CD ON (CT.tk = CD.comision_tramite_tk)
  91. WHERE (T.tk = CT.tramite_tk)
  92. AND (CD.tipo_dictamen_tk = 1)
  93. AND (C.tipo_comision_tk <> 2)
  94. AND ( CD.estado_comision_dictamen_tk IN (4,6))) CA_D ON (CA_D.tramite_tk = CT.tramite_tk)
  95.  
  96. INNER JOIN DATO_ACADEMICO_TRAMITE DAT ON (T.tk = DAT.tramite_tk)
  97. LEFT JOIN DISCIPLINA DIS ON (DIS.tk = DAT.disciplina_tk)
  98. LEFT JOIN DISCIPLINA_DESAGREGADA DISDES ON (DISDES.tk = DAT.disciplina_desagregada_tk)
  99. LEFT JOIN DISCIPLINA DIS2 ON (DIS2.tk = DAT.disciplina_sec_tk)
  100. LEFT JOIN DISCIPLINA_DESAGREGADA DISDES2 ON (DISDES2.tk = DAT.disciplina_desagregada_sec_tk)
  101. LEFT JOIN GRAN_AREA AS GA ON (DIS.gran_area_tk=GA.tk)
  102.  
  103. LEFT JOIN DIRECTOR_TRAMITE_PRESENTADO DT ON (DT.tramite_tk = T.tk )
  104. LEFT JOIN DIRECTOR_PRESENTADO DIR ON (DIR.tk = DT.director_tk AND DIR.tipo_director_tk = 1)
  105. LEFT JOIN UNIDAD_ORGANIZATIVA org ON (org.tk = LT.unidad_organizativa_tk)
  106. LEFT JOIN UNIDAD_ORGANIZATIVA UO1 ON (UO1.tk = SUBSTR(org.unidad, 1, 7))
  107. LEFT JOIN UNIDAD_ORGANIZATIVA UO2 ON (UO2.tk = SUBSTR(org.unidad, 9, 7))
  108. LEFT JOIN UNIDAD_ORGANIZATIVA UO3 ON (UO3.tk = SUBSTR(org.unidad, 17, 7))
  109. LEFT JOIN UNIDAD_ORGANIZATIVA UO4 ON (UO4.tk = SUBSTR(org.unidad, 25, 7))
  110. LEFT JOIN LOCALIDAD LOC ON (org.localidad_tk=LOC.tk)
  111. LEFT JOIN PARTIDO PART ON (LOC.partido_tk=PART.tk)
  112. LEFT JOIN PROVINCIA PROV ON (PART.provincia_tk=PROV.tk)
  113. LEFT JOIN PAIS PA ON (PROV.pais_tk=PA.tk)
  114.  
  115. WHERE C.tipo_comision_tk <> 2
  116. AND LIME.objeto_evaluacion_tk IS NOT NULL
  117. AND CO.tk IN (104201102,103201102,105201102,104201101,103201101,105201101)
  118. ORDER BY C.comision,CO.tk,PUNT.orden_merito;

Muchas gracias

Última edición por gnzsoloyo; 21/12/2012 a las 11:08 Razón: Código SQL sin etiquetado.
  #2 (permalink)  
Antiguo 21/12/2012, 11:10
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: Query demasiado lento (23hs)

Armate de paciencia, porque esa consulta hay que revisarla con mucho cuidado.
A primera vista, desde ya te digo que huele fuertemente a producto cartesiano, diseño de datos defectuoso, e hiperatomizacion de relaciones.
Pero para poder decirte algo más claro, deberé revisarla detalladamente...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/12/2012, 12:07
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Query demasiado lento (23hs)

¡¡Toma consulta!! Y yo que me ahogo en un vaso de agua con 3 JOINS...

Lo siento pero es demasiado para mi... ¡Lo que me queda por aprender!

¡¡Suerte!!

Etiquetas: lento, query
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 13:59.