RE: Consulta toma 100 Minutos!!??

From: Leonardo Boet Sánchez <boet(at)gtm(dot)tel(dot)etecsa(dot)cu>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Consulta toma 100 Minutos!!??
Date: 2005-09-07 19:20:51
Message-ID: 8833BE7BC6607C468C4F07FEBAB9E6EC9A90EE@srvgtm.gtm.tel.etecsa.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Realmente haces bastante uso del motor con esto de "not in (select )"
Verificas cada fila de la primera tabla y por cada de ellas unes nuevamente las 3 tablas y buscas en ellas.

Yo lo haría de la siguiente manera y debe ser mucho mas eficiente. Si tienes los indices creados debe ser rapidísimo.

SELECT "Rut Cliente"
FROM "Internet_Abril" LEFT OUTER JOIN ((SELECT "Rut Cliente" FROM
"Internet_Enero") UNION (SELECT "Rut Cliente" FROM
"Internet_Febrero") UNION (SELECT "Rut Cliente" FROM
"Internet_Marzo")) tlb1
on "Internet_Abril"."Rut Cliente" = tlb1."Rut Cliente"
WHERE tlb1."Rut Cliente" = null

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Christian Compagnon
Enviado el: miércoles, 07 de septiembre de 2005 12:49 P
Para: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: [pgsql-es-ayuda] Consulta toma 100 Minutos!!??

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)

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Christian Compagnon 2005-09-07 19:46:32 Re: Consulta toma 100 Minutos!!??
Previous Message Viveros A., Guillermo M. 2005-09-07 19:14:21 Consulta