[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>&nbsp;</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>&nbsp;</DIV>
<DIV>De antemano gracias</DIV>
<DIV>&nbsp;</DIV>
<DIV>Adjunto las dos consultas</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Consulta 1 (usando funciones)</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; View "public.gvinventario"<BR>&nbsp;&nbsp;&nbsp;&nbsp; Column&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
 Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Modifiers<B=
R>-----------------+-----------------------+-----------<BR>&nbsp;producto=
_id&nbsp;&nbsp;&nbsp;&nbsp; | character varying(20) |<BR>&nbsp;descripcio=
n&nbsp;&nbsp;&nbsp;&nbsp; | character varying(40) |<BR>&nbsp;proveedor_id=
&nbsp;&nbsp;&nbsp; | smallint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;familia_id&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp; | smallint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;stockcrimin&nbsp;&nbsp;&nbsp;&nb=
sp; | integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;stockcrimax&nbsp;&nbsp;&nbsp;&nbsp; |=
 integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;costo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; | double precision&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
|<BR>&nbsp;precio&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |=
 double precision&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;salidas_factur=
a | integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;salidas_guia&nbsp;&nbsp;&nbsp; | intege=
r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; |<BR>&nbsp;salidas_om&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | intege=
r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; |<BR>&nbsp;entradas_imp&nbsp;&nbsp;&nbsp; | integer&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p; |<BR>&nbsp;entradas_om&nbsp;&nbsp;&nbsp;&nbsp; | integer&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<=
BR>&nbsp;stock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; | integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; |<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>&nbsp;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>&nbsp;AS stock FROM producto;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Consulta 2 sin funciones</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp; View "public.gvinventario2"<BR>&nbsp;&nbsp;&nbsp;&nbsp; Column&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Modifiers<=
BR>-----------------+-----------------------+-----------<BR>&nbsp;product=
o_id&nbsp;&nbsp;&nbsp;&nbsp; | character varying(20) |<BR>&nbsp;descripci=
on&nbsp;&nbsp;&nbsp;&nbsp; | character varying(40) |<BR>&nbsp;proveedor_i=
d&nbsp;&nbsp;&nbsp; | smallint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;familia_id&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; | smallint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;stockcrimin&nbsp;&nbsp;&nbsp;&n=
bsp; | integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;stockcrimax&nbsp;&nbsp;&nbsp;&nbsp; =
| integer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;costo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; | double precision&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
 |<BR>&nbsp;precio&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
| double precision&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;salidas_factu=
ra | bigint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;salidas_guia&nbsp;&nbsp;&nbsp; | =
bigint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;entradas_om&nbsp;&nbsp;&nbsp;&nbsp; | =
bigint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;salidas_om&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p; | bigint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; |<BR>&nbsp;entradas_imp&nbsp;&nbsp;&nbsp; | =
bigint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&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>&nbsp;guia ON ((producto.producto_id =3D guia.prod=
ucto_id))) LEFT JOIN otrosmovimientos<BR>&nbsp;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>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</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>&nbsp; <I>IncrediMail</I> =
- <B>El E-mail ha evolucionado finalmente</B> - </FONT><A href=3D"http://=
www.incredimail.com/redir.asp?ad_id=3D310&amp;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--