Re: Optimizar consulta

From: Mario Soto Cordones <msotocl(at)gmail(dot)com>
To: Ricardo Fuentes Pereira <rfuentesp(at)gmail(dot)com>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Optimizar consulta
Date: 2005-05-20 19:36:11
Message-ID: e9b17cde0505201236540ef7e2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Creo que deberias mejorar el sp, o tener una vista , yo para algo
parecido a tu caso cree una vista y mejoro 200% el rendimiento

Suerte

El 20/05/05, Ricardo Fuentes Pereira<rfuentesp(at)gmail(dot)com> escribió:
> Hola lista.
> Tengo un problema.
> Sucede que tengo que recorrer varias tablas según un parámetro, en este
> caso rut.
> He aquí la sentencia (mas pequeña que la real, pero lo importante es que
> se entienda)
>
> SELECT *
> FROM (
> SELECT * ,
> (fact.compra.sum_valor_fc + fact_gasto.sum_valor_fg) AS
> sum_valor
> FROM sx_prov prov,
> -- fact_compra
> -- recorro la tabla sx_fact_compra segun el rut
> -- para obtener a cuanto ascienden las factura de compra
> (
> SELECT COALESCE(SUM(valor_neto * (1 + valor_iva)), 0) AS
> sum_valor_fc
> FROM sx_fact_compra
> WHERE rut = $1
> ) AS fact_compra,
> -- fact_gasto
> -- analogo a la sx_fact_compra
> (
> SELECT COALESCE(SUM(valor_neto * (1 + valor_iva)), 0) AS
> sum_valor_fg
> FROM sx_fact_gasto
> WHERE rut = $1
> ) AS fact_gasto
> WHERE prov.rut = $1
> GROUP BY
> --- los GROUP BY necesarios
> ) AS tabla
> ORDER BY sum_valor DESC
>
> Actualmente esto lo programo desde el lenguaje de programación (Java), o
> sea obtengo todos los rut's y luego uno a uno voy obteniendo los datos.
> Funcionaba bien hasta que lo probamos en un entorno real donde habían
> muchos datos. Y claro, el tiempo de espera se hizo eterno (6 minutos mas
> o menos), ocupa toda la CPU, entre otros problemas. Ahí el cuello de
> botella estaría (a grueso modo) en abrir la conexion, obtener los datos
> y cerrar la conexion por cada parametro.
>
> Como se ve, deseo obtener a cuánto han ascendido las compras de la
> empresa para un proveedor especificado. Para ello tengo que entrar a
> diferentes tablas donde están los distintos documentos asociados:
> factura de compra, factura de gasto, notas de credito (omitida en la sql
> por simplicidad), notas de debito (omitida en la sql por simplicidad).
>
> Para un solo proveedor funciona, pero cuando la trate de hacer para que
> me devolviese una lista de todos con sus 'sum_valor', me entregaba
> informacion erronea de 'sum_valor' sumando varias veces, o sumando otros
> valores (lo hice hace tiempo, asi que no recuerdo bien los detalles,
> pero de que no salian los datos bien, no salian :'( ).
>
> Entonces hice lo que comente en el 1er mail (Obtener todos los rut de la
> tabla de proveedores y despues uno por uno calcular su 'sum_valor')
>
> Ahora hay dos posibles soluciones, a mi modo de ver:
> Hacer eso de obtener todos los rut de la tabla de proveedores y
> despues calcular uno por uno su 'sum_valor' pero ahora solo desde un
> procedimiento almacenado; o,
> Mejorar el procedimiento almacenado anterior de manera que si funcione
> entregando los datos de los proveedores y su correspondiente 'sum_valor'
>
> Salu2.
> PD: Se que esto lo pregunte antes, pero al no recibir respuesta pues el
> mail anterior mostraba muy difusamente la sentencia SQL, decidi
> reenviarla como otra consulta a la lista
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 7: no olvides aumentar la configuración del "free space map"
>

--
cordialmente,

Ing. Mario Soto Cordones

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mauricio Zea (Gmail) 2005-05-20 19:43:55 Re: Traspaso de datos deOracle a PostgreSQL
Previous Message Ricardo Fuentes Pereira 2005-05-20 19:31:03 Optimizar consulta