From: | Carlos Alberto Mÿffffffffffe1rquez Rey <carlos_marquez_rey(at)yahoo(dot)com> |
---|---|
To: | Christian Compagnon <ccompagnon(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Consulta toma 100 Minutos!!?? |
Date: | 2005-09-07 18:11:38 |
Message-ID: | 20050907181138.98859.qmail@web50814.mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola Christian
Esa demora bien puede ser por el uso del "not in"
Se me ocurre que podrias implementar una funcion que
te indique si el codigo rut esta en esa tablas, la
consulta quedaria asi
SELECT "Rut Cliente"
FROM "Internet_Abril"
WHERE f_xyz("Rut Cliente") = 'N'
y la funcion seria asi:
CREATE OR REPLACE FUNCTION public.f_xyz("varchar")
RETURNS "varchar" AS
$BODY$
declare
v_encontro varchar;
vo_codigo varchar;
i_count integer;
begin
v_encontro = 'N';
SELECT into i_count count("Rut Cliente")
FROM "Internet_Febrero"
WHERE "Rut Cliente" = $1;
if i_count > 0 then
v_encontro = 'S';
return v_encontro
end if;
SELECT into i_count count("Rut Cliente")
FROM "Internet_Marzo"
WHERE "Rut Cliente" = $1;
if i_count > 0 then
v_encontro = 'S';
return v_encontro
end if;
return v_encontro
end
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION f_xyz() OWNER TO postgres;
Pero me parece que tu diseño no es el adecuado, como
vas a manejar registros por año, pones tablaspara
enero, febrero, marzo, y cuando tengas registros de
enero del proximo año, como lo vas a manejar?
--- Christian Compagnon <ccompagnon(at)gmail(dot)com>
escribió:
> Hola
>
> Soy nuevo en postgresql, tuve que instalarlo porque
> Access no fue
> capaz de soportar las consultas, instalé postgres en
> una maquina con
> Windows XP ( No puedo usar linux, porque es el
> computador del trabajo
> ),
>
> Estoy realizando una consulta, y toma mucho tiempo
> en realizarse, como
> 100 minutos en un P4 de 2.8Ghz 512Mb RAM, la
> consulta es la siguiente:
>
> SELECT "Rut Cliente"
> FROM "Internet_Abril"
> WHERE "Rut Cliente" NOT IN ((SELECT "Rut Cliente"
> FROM
> "Internet_Enero") UNION (SELECT "Rut Cliente" FROM
> "Internet_Febrero") UNION (SELECT "Rut Cliente"
> FROM
> "Internet_Marzo"));
>
> Todas las tablas tienen indices creados( Rut Cliente
> es VarChar ), y
> las tablas tienen 50.000 registros en promedio.
>
> El explain de la consulta arroja lo siguiente.
>
> "QUERY PLAN
> Seq Scan on "Internet_Abril"
> (cost=19406.67..62126112.70 rows=24731 width=13)
> Filter: (NOT (subplan))
> SubPlan
> -> Materialize (cost=19406.67..21576.07
> rows=136740 width=13)
> -> Unique (cost=17784.23..18467.93
> rows=136740 width=13)
> -> Sort (cost=17784.23..18126.08
> rows=136740 width=13)
>
> Sort
> Key: "Rut Cliente"
> -> Append (cost=0.00..3741.80 rows=136740
> width=13)
> -> Subquery Scan "*SELECT* 1"
> (cost=0.00..1233.38
> rows=45069 width=13)
> -> Seq Scan on "Internet_Enero"
> (cost=0.00..782.69
> rows=45069 width=13)
> -> Subquery Scan "*SELECT* 2"
> (cost=0.00..1104.06
> rows=40353 width=13)
> -> Seq Scan on "Internet_Febrero"
> (cost=0.00..700.53
> rows=40353 width=13)
> -> Subquery Scan "*SELECT* 3"
> (cost=0.00..1404.36
> rows=51318 width=13)
> -> Seq Scan on "Internet_Marzo"
> (cost=0.00..891.18
> rows=51318 width=13)
>
> Cualquier ayuda se agradece, tengo que hacer 30
> consultas similiares
> para obtener los datos para mi tesis.
>
> saludos
> Christian
>
> ---------------------------(fin del
> mensaje)---------------------------
> TIP 2: puedes desuscribirte de todas las listas
> simultáneamente
> (envíe "unregister TuDirecciónDeCorreo" a
> majordomo(at)postgresql(dot)org)
>
***********************************************************
Carlos Márquez
***********************************************************
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/
From | Date | Subject | |
---|---|---|---|
Next Message | Ricardo David Carrillo Sánchez | 2005-09-07 18:35:32 | Otra ves con soporte para ssl |
Previous Message | Hugo Gamarra | 2005-09-07 17:46:46 | Re: Consulta toma 100 Minutos!!?? |