Ver Mensaje Individual
  #3 (permalink)  
Antiguo 29/08/2015, 11:10
oggy_15_3
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 7 meses
Puntos: 8
Respuesta: EJECUTAR QUERY QUE DEMORA MAS DE 4000MS (postgresql)

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Dos registros no pueden generar semejante demora. Es evidente que hay problemas con la sintaxis de la consulta, o bien los la estructura de datos. En cualquier caso es un tema OFF TOPIC en PHP y deberías preguntar en el foro de PostgreSQL, posteando la query, porque sin verla es imposible hacer un diagnóstico.

PHP no va a solucionar nada, porque no interpreta SQL, ni lo entiende.
Quizás me equivoque, pero considero que debe estar posteado en php
ya que desde el pgadmin de postgresql la query sólo demora 5seg. en su carga.

Gracias por tu consejo, pero discrepo con lo de postearlo en el foro de POSTGRESQL por lo siguiente:
- Siempre habrá querys en la que el resultado demoré más de 5 segundos (el mio demora en sí 6seg), por ello no lo pongo en la sección de postgresql, considero que el problema estaría en php y que quizás haya la manera de aumentar el tiempo de respuesta de la consulta hecha (memoria). Hay queerys muys complejas que considero php puede cargar, como esta.

El query que uso es el siguiente:

Código MySQL:
Ver original
  1. SELECT ot.fec_inic,(case ns.cdg_tpg when '002' then '/S' else '' end)AS cdg_tpg,ns.num_guia,
  2. to_char(ns.fec_guia, 'Month')AS let_mes,date_part('month',ns.fec_guia)AS num_mes, to_char(ns.fec_guia,'dd-mm-YYYY')AS fec_guia,prd.des_prod,
  3. ROUND(nsd.can_dgui,4) AS can_sal, '0' AS can_dev, nsd.can_dgui AS can_cons,
  4. ROUND((case ns.cdg_mon when '001' then nsd.pre_guia else (case 001 when '002'
  5. then nsd.pre_guia/tcmb.tip_cmb else nsd.pre_guia*tcmb.tip_cmb end)end)::numeric,4)AS cto_unit,
  6. ROUND((nsd.can_dgui*(case ns.cdg_mon when '001' then nsd.pre_guia else (case 001 when '002'
  7. then nsd.pre_guia/tcmb.tip_cmb else nsd.pre_guia*tcmb.tip_cmb end)end)),4)AS cto_tot,nsd.cdg_prod,
  8. LEFT(nsd.cdg_prod,3)AS familia, ot.num_otrb,otd.cdg_prod AS cdg_prod_int, ns.cdg_mon,tcmb.tip_cmb,(case 001 when '002' then 'US$' else 'S/.' end) AS sigla_moneda
  9. FROM m_ordtrb ot
  10. INNER JOIN d_ordtrb otd ON otd.num_otrb=ot.num_otrb
  11. INNER JOIN m_guia ns ON (ns.num_otrb=ot.num_otrb AND ns.cdg_tpg='002' AND ns.swt_est<>'A')
  12. INNER JOIN d_guia nsd ON (nsd.num_guia=ns.num_guia AND ns.cdg_tpg=nsd.cdg_tpg)
  13. INNER JOIN p_guia mat ON (mat.num_guia=ns.num_guia AND (mat.cdg_term=otd.cdg_prod AND mat.cdg_prod=nsd.cdg_prod
  14. AND mat.num_otrb=ot.num_otrb AND mat.num_otrb=ns.num_otrb) )
  15. INNER JOIN t_cambio tcmb ON tcmb.fec_cmb=ns.fec_guia
  16. INNER JOIN m_produc prd ON prd.cdg_prod=nsd.cdg_prod
  17. WHERE ot.swt_apr=1 AND(ot.fec_inic>='01-3-2015' AND ot.fec_inic<='31-3-2015')
  18. AND ((ot.num_otrb='') OR (ot.num_otrb='0200001281' AND otd.cdg_prod
  19. IN('7676100697','7676100698','7676100699','7676100700','7676100701','7676100702','7676100703','7676100704','7676100705')))
  20. ORDER BY ns.fec_guia,ns.num_guia

Las condicionales del query pueden varias en fechas y num. orden de trabajo.

Y si estoy equivocado en lo que redacto, mil disculpas, pero quiero aferrarme un poco a que el problema estaría en php.

Saludos!.