[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--