Estoy probando lo de numeric. Después paso los resultado.
No me mates pero no entendí lo de clave primaria. Efectivamente, la tabla rrhh_cubo_publicado_810 no tiene clave primaria.
Vi tu ejemplo pero no entiendo a lo que te refieres. Que consecuencia tiene que no tenga clave primaria? Es decir, ademas de problemas de integridad, normalización, etc. A la hora de rendimiento en que y como afecta no tenerla? Seguramente con tu ejemplo se entienda! dame una ayuda porque no termino de comprender a lo que te refieres.

Muchas Gracias nuevamente!
Saludos
Nico.

Jaime Casanova escribió:
On Dec 3, 2007 4:27 PM, Nicolás Domínguez Florit
<ndomin@rec.unicen.edu.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?