[Pgsql-ayuda] Consulta sobre velocidad de consultas
Carlos Leyán B.
cleyan@terra.cl
Fri, 31 Jan 2003 23:20:31 -0300 (Hora de ver. del Pacífico SA)
--------------Boundary-00=_7IYLG6G0000000000000
Content-Type: Multipart/Alternative;
boundary="------------Boundary-00=_8IYLBHK0000000000000"
--------------Boundary-00=_8IYLBHK0000000000000
Content-Type: Text/Plain;
charset="iso-8859-1"
Content-Transfer-Encoding: Quoted-Printable
Amigos!=0D
=0D
Tengo una consulta que calcula un inventario, debo sacar los subtotales d=
e
guias, facturas, otras salidas, importaciones, otros ingresos para cada
producto de una base de datos, inicialmente he hecho esto usando funcione=
s
pero en casos es extremadamente lento, hablamos de minutos de espera, aho=
ra
lo hice usando solo consultas con join pero sigue igual de lento, alguin =
em
puede ayudar?, experiencias?, sugerencias?, otra solucion para inventario=
en
linea?=0D
=0D
De antemano gracias=0D
=0D
Adjunto las dos consultas=0D
=0D
=0D
Consulta 1 (usando funciones)=0D
View "public.gvinventario"=0D
Column | Type | Modifiers=0D
-----------------+-----------------------+-----------=0D
producto_id | character varying(20) |=0D
descripcion | character varying(40) |=0D
proveedor_id | smallint |=0D
familia_id | smallint |=0D
stockcrimin | integer |=0D
stockcrimax | integer |=0D
costo | double precision |=0D
precio | double precision |=0D
salidas_factura | integer |=0D
salidas_guia | integer |=0D
salidas_om | integer |=0D
entradas_imp | integer |=0D
entradas_om | integer |=0D
stock | integer |=0D
View definition: SELECT producto.producto_id, producto.descripcion, produ=
cto
pro=0D
veedor_id, producto.familia_id, producto.stockcrimin, producto.stockcrima=
x,
prod=0D
ucto.costo, producto.precio, int4(salidas_factura((producto
producto_id)::text))=0D
AS salidas_factura, int4(salidas_guia((producto.producto_id)::text)) AS
salidas=0D
_guia, int4(salidas_om((producto.producto_id)::text)) AS salidas_om,
int4(entrad=0D
as_imp((producto.producto_id)::text)) AS entradas_imp,
int4(entradas_om((product=0D
o.producto_id)::text)) AS entradas_om, int4(stock((producto
producto_id)::text))=0D
AS stock FROM producto;=0D
=0D
=0D
Consulta 2 sin funciones=0D
=0D
View "public.gvinventario2"=0D
Column | Type | Modifiers=0D
-----------------+-----------------------+-----------=0D
producto_id | character varying(20) |=0D
descripcion | character varying(40) |=0D
proveedor_id | smallint |=0D
familia_id | smallint |=0D
stockcrimin | integer |=0D
stockcrimax | integer |=0D
costo | double precision |=0D
precio | double precision |=0D
salidas_factura | bigint |=0D
salidas_guia | bigint |=0D
entradas_om | bigint |=0D
salidas_om | bigint |=0D
entradas_imp | bigint |=0D
View definition: SELECT producto.producto_id, producto.descripcion, produ=
cto
pro=0D
veedor_id, producto.familia_id, producto.stockcrimin, producto.stockcrima=
x,
prod=0D
ucto.costo, producto.precio, sum(factura.qty) AS salidas_factura, sum(gui=
a
qty)=0D
AS salidas_guia, sum(otrosmovimientos.entrada) AS entradas_om,
sum(otrosmovimien=0D
tos.salida) AS salidas_om, sum(importacion.qty) AS entradas_imp FROM
((((product=0D
o LEFT JOIN factura ON ((producto.producto_id =3D factura.producto_id))) =
LEFT
JOIN=0D
guia ON ((producto.producto_id =3D guia.producto_id))) LEFT JOIN
otrosmovimientos=0D
ON ((producto.producto_id =3D otrosmovimientos.producto_id))) LEFT JOIN
importaci=0D
on ON ((producto.producto_id =3D importacion.producto_id))) WHERE (guia
facturada=0D
=3D false) GROUP BY producto.producto_id, producto.descripcion, producto
proveedor=0D
_id, producto.familia_id, producto.stockcrimin, producto.stockcrimax,
producto.c=0D
osto, producto.precio;
--------------Boundary-00=_8IYLBHK0000000000000
Content-Type: Text/HTML;
charset="iso-8859-1"
Content-Transfer-Encoding: Quoted-Printable
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; charset=3Diso-8859-=
1">
<META content=3D"IncrediMail 1.0" name=3DGENERATOR>
<!--IncrdiXMLRemarkStart>
<IncrdiX-Info>
<X-FID>FLAVOR00-NONE-0000-0000-000000000000</X-FID>
<X-FVER>3.0</X-FVER>
<X-CNT>;</X-CNT>
</IncrdiX-Info>
<IncrdiXMLRemarkEnd-->
</HEAD>
<BODY style=3D"BACKGROUND-POSITION: 0px 0px; FONT-SIZE: 12pt; MARGIN: 5px=
10px 10px; FONT-FAMILY: Arial" bgColor=3D#ffffff background=3D"" scroll=3D=
yes ORGYPOS=3D"0" X-FVER=3D"3.0">
<TABLE id=3DINCREDIMAINTABLE cellSpacing=3D0 cellPadding=3D2 width=3D"100=
%" border=3D0>
<TBODY>
<TR>
<TD id=3DINCREDITEXTREGION style=3D"FONT-SIZE: 12pt; CURSOR: auto; FONT-F=
AMILY: Arial" width=3D"100%">
<DIV>Amigos!</DIV>
<DIV> </DIV>
<DIV>Tengo una consulta que calcula un inventario, debo sacar los subtota=
les de guias, facturas, otras salidas, importaciones, otros ingresos para=
cada producto de una base de datos, inicialmente he hecho esto usando fu=
nciones pero en casos es extremadamente lento, hablamos de minutos de esp=
era, ahora lo hice usando solo consultas con join pero sigue igual de len=
to, alguin em puede ayudar?, experiencias?, sugerencias?, otra solucion p=
ara inventario en linea?</DIV>
<DIV> </DIV>
<DIV>De antemano gracias</DIV>
<DIV> </DIV>
<DIV>Adjunto las dos consultas</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Consulta 1 (usando funciones)</DIV>
<DIV> &n=
bsp; View "public.gvinventario"<BR> Column &=
nbsp; | =
Type | Modifiers<B=
R>-----------------+-----------------------+-----------<BR> producto=
_id | character varying(20) |<BR> descripcio=
n | character varying(40) |<BR> proveedor_id=
| smallint &n=
bsp; |<BR> familia_id  =
; | smallint &=
nbsp; |<BR> stockcrimin &nb=
sp; | integer =
|<BR> stockcrimax |=
integer  =
; |<BR> costo &=
nbsp; | double precision =
|<BR> precio |=
double precision |<BR> salidas_factur=
a | integer &n=
bsp; |<BR> salidas_guia | intege=
r =
|<BR> salidas_om | intege=
r =
|<BR> entradas_imp | integer &nb=
sp; &nbs=
p; |<BR> entradas_om | integer &n=
bsp; |<=
BR> stock  =
; | integer &n=
bsp; |<BR>View definition: SELECT producto.producto_id,=
producto.descripcion, producto.pro<BR>veedor_id, producto.familia_id, pr=
oducto.stockcrimin, producto.stockcrimax, prod<BR>ucto.costo, producto.pr=
ecio, int4(salidas_factura((producto.producto_id)::text))<BR> AS sal=
idas_factura, int4(salidas_guia((producto.producto_id)::text)) AS salidas=
<BR>_guia, int4(salidas_om((producto.producto_id)::text)) AS salidas_om, =
int4(entrad<BR>as_imp((producto.producto_id)::text)) AS entradas_imp, int=
4(entradas_om((product<BR>o.producto_id)::text)) AS entradas_om, int4(sto=
ck((producto.producto_id)::text))<BR> AS stock FROM producto;</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Consulta 2 sin funciones</DIV>
<DIV> </DIV>
<DIV> &n=
bsp; View "public.gvinventario2"<BR> Column =
|  =
; Type | Modifiers<=
BR>-----------------+-----------------------+-----------<BR> product=
o_id | character varying(20) |<BR> descripci=
on | character varying(40) |<BR> proveedor_i=
d | smallint &=
nbsp; |<BR> familia_id &nbs=
p; | smallint =
|<BR> stockcrimin &n=
bsp; | integer  =
; |<BR> stockcrimax =
| integer &nbs=
p; |<BR> costo =
| double precision =
|<BR> precio =
| double precision |<BR> salidas_factu=
ra | bigint &n=
bsp; |<BR> salidas_guia | =
bigint &=
nbsp; |<BR> entradas_om | =
bigint &=
nbsp; |<BR> salidas_om &nbs=
p; | bigint &n=
bsp; |<BR> entradas_imp | =
bigint &=
nbsp; |<BR>View definition: SELECT producto.producto_id=
, producto.descripcion, producto.pro<BR>veedor_id, producto.familia_id, p=
roducto.stockcrimin, producto.stockcrimax, prod<BR>ucto.costo, producto.p=
recio, sum(factura.qty) AS salidas_factura, sum(guia.qty)<BR>AS salidas_g=
uia, sum(otrosmovimientos.entrada) AS entradas_om, sum(otrosmovimien<BR>t=
os.salida) AS salidas_om, sum(importacion.qty) AS entradas_imp FROM ((((p=
roduct<BR>o LEFT JOIN factura ON ((producto.producto_id =3D factura.produ=
cto_id))) LEFT JOIN<BR> guia ON ((producto.producto_id =3D guia.prod=
ucto_id))) LEFT JOIN otrosmovimientos<BR> ON ((producto.producto_id =
=3D otrosmovimientos.producto_id))) LEFT JOIN importaci<BR>on ON ((produc=
to.producto_id =3D importacion.producto_id))) WHERE (guia.facturada<BR>=3D=
false) GROUP BY producto.producto_id, producto.descripcion, producto.pro=
veedor<BR>_id, producto.familia_id, producto.stockcrimin, producto.stockc=
rimax, producto.c<BR>osto, producto.precio;</DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV> </DIV></TD></TR>
<TR>
<TD id=3DINCREDIFOOTER width=3D"100%">
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%">
<TBODY>
<TR>
<TD width=3D"100%"></TD>
<TD id=3DINCREDISOUND vAlign=3Dbottom align=3Dmiddle></TD>
<TD id=3DINCREDIANIM vAlign=3Dbottom align=3Dmiddle></TD></TR></TBODY></T=
ABLE></TD></TR></TBODY></TABLE><SPAN id=3DIncrediStamp><SPAN dir=3Dltr><F=
ONT face=3D"Arial, Helvetica, sans-serif" size=3D2>______________________=
___________________________________________<BR><FONT face=3D"Comic Sans M=
S" size=3D2><A href=3D"http://www.incredimail.com/redir.asp?ad_id=3D310&a=
mp;lang=3D10"><IMG alt=3D"" hspace=3D0 src=3D"cid:8CE954CA-5B79-444F-A56B=
-6AA5F097AA96" align=3Dbaseline border=3D0></A> <I>IncrediMail</I> =
- <B>El E-mail ha evolucionado finalmente</B> - </FONT><A href=3D"http://=
www.incredimail.com/redir.asp?ad_id=3D310&lang=3D10"><FONT face=3D"Ti=
mes New Roman" size=3D3><B><U>Haga clic aqu=ED</U></B></FONT></A></SPAN><=
/SPAN></FONT></BODY></HTML>
--------------Boundary-00=_8IYLBHK0000000000000--
--------------Boundary-00=_7IYLG6G0000000000000
Content-Type: image/gif;
name="IMSTP.gif"
Content-ID: <8CE954CA-5B79-444F-A56B-6AA5F097AA96>
Content-Transfer-Encoding: Base64
R0lGODlhFAAPALMIAP9gAM9gAM8vAM9gL/+QL5AvAGAvAP9gL////wAAAAAAAAAAAAAAAAAAAAAA
AAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQJFAAIACwAAAAAFAAPAAAEVRDJSaudJuudrxlEKI6B
URlCUYyjKpgYAKSgOBSCDEuGDKgrAtC3Q/R+hkPJEDgYCjpKr5A8WK9OaPFZwHoPqm3366VKyeRt
E30tVVRscMHDqV/u+AgAIfkEBWQACAAsAAAAABQADwAABBIQyUmrvTjrzbv/YCiOZGmeaAQAIfkE
CRQACAAsAgABABAADQAABEoQIUOrpXIOwrsPxiQUheeRAgUA49YNhbCqK1kS9grQhXGAhsDBUJgZ
AL2Dcqkk7ogFpvRAokSn0p4PO6UIuUsQggSmFjKXdAgRAQAh+QQFCgAIACwAAAAAFAAPAAAEEhDJ
Sau9OOvNu/9gKI5kaZ5oBAAh+QQJFAAIACwCAAEAEAANAAAEShAhQ6ulcg7Cuw/GJBSF55ECBQDj
1g2FsKorWRL2CtCFcYCGwMFQmBkAvYNyqSTuiAWm9ECiRKfSng87pQi5SxCCBKYWMpd0CBEBACH5
BAVkAAgALAAAAAAUAA8AAAQSEMlJq7046827/2AojmRpnmgEADs=
--------------Boundary-00=_7IYLG6G0000000000000--