Re: Ayuda con una consulta...

From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: Nicolás Domínguez Florit <ndomin(at)rec(dot)unicen(dot)edu(dot)ar>
Cc: "Rodriguez Fernando" <rodriguez(at)ort(dot)edu(dot)uy>, pssql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda con una consulta...
Date: 2007-12-04 03:34:45
Message-ID: c2d9e70e0712031934n785152ew17cbc15069dcfac4@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Dec 3, 2007 4:27 PM, Nicolás Domínguez Florit
<ndomin(at)rec(dot)unicen(dot)edu(dot)ar> wrote:
> Hola Fernando, hola lista!
> Luego de probar de agregar los índices que me recomendó fernando, la
> consulta tardo 20 minutos menos.
> Les paso el nuevo explain analyze:
> http://explain-analyze.info/query_plans/1521-nicolasdom-siu-2
>
> Se les ocurre algo mas para que mejore? ya que 1 hora me parece que es mucho
> tiempo.

Alguna razon en particular para tener tantos numeric(2), numeric(3) y
cosas asi? porque mejor no usas integer en esos casos? tengo entendido
que las operaciones sobre numeric son mas costosas

otra pregunta es porque tienes tablas sin claves primarias:
dices que la tabla rrhh_cubo_publicado_810 tiene 283 registros, por
eso me llamo la atencion esto (sera por que esa tabla no tiene clave
prmaria?):

-> Sort (cost=17.73..18.42 rows=276 width=12) (actual
time=22.287..14848.605 rows=10356608 loops=1)
Sort Key: t.cod_rrhh_importacion
-> Seq Scan on rrhh_cubo_publicado_810 t (cost=0.0..6.54 rows=276
width=12) (actual time=11.032..21.595 rows=274 loops=1)
Filter: (cod_institucion <> 7)

este ejemplo parece confirmar mi suposicion:
prueba=# drop table t1;
DROP TABLE
prueba=# drop table t2;
DROP TABLE
prueba=# create table t1 (c1 int, c2 int);
CREATE TABLE
prueba=# create table t2 (c1 int, c2 int);
CREATE TABLE
prueba=# insert into t1 select random() * foo, random() * foo from generate_seri
es(1, 1000) as foo;
INSERT 0 1000
prueba=# insert into t2 select random() * foo, random() * foo from generate_seri
es(1, 1000) as foo;
INSERT 0 1000
prueba=# select count(*) from t1, t2
prueba-# where t1.c1 = t2.c1 and t1.c1 <> 7;
count
-------
1974
(1 row)

algo mas, imagino que si has ejecutado vacuum, verdad?

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Fabiola Fernández 2007-12-04 10:59:01 Problemas para conectar a la base de datos con ESQL
Previous Message Jaime Casanova 2007-12-04 02:17:13 Re: Ayuda para unir valores de dos campos.