HOLA A TODOS, TENGO LA SIGUEINTE CONSULTA:
Código SQL:
Ver originalSELECT sp.ciudad,sp.nombre_localidad AS localidad,sp.periodo,sp.nivsocio,
to_char(SUM(sp.htotal),'999g999g999g999') AS htotal,
to_char(SUM(sp.h0509),'999g999g999g999') AS h0509,
to_char(SUM(sp.h1014),'999g999g999g999') AS h1014,
to_char(SUM(sp.h1519),'999g999g999g999') AS h1519,
to_char(SUM(sp.h2024),'999g999g999g999') AS h2024,
to_char(SUM(sp.h2529),'999g999g999g999') AS h2529,
to_char(SUM(sp.h3034),'999g999g999g999') AS h3034
FROM servcon_poblaingas_11001 sp
WHERE sp.periodo IN ('2011') AND
sp.nivsocio IN ('2','3','4','5')
GROUP BY sp.ciudad,localidad,sp.periodo,sp.nivsocio
ORDER BY localidad,periodo,nivsocio
La cual se arma dinamicamente y se ejcuta sobre una tabla de 387315 registros y posee 94 columnas, la primera que lo ejecute en pgAdmin directamente en el servidor se tardo aprox 2 minutos, de resto su tiempo esta en un rago de 1.4 a 2 segundos, primera pregunta porque?
DESPUES hice un EXPLAIN DE ESE select y me arrojo lo siguiente:
Código SQL:
Ver originalSort (cost=70587.03..70587.21 ROWS=73 width=59)
Sort KEY: nombre_localidad, periodo, nivsocio
-> HashAggregate (cost=70582.21..70584.77 ROWS=73 width=59)
-> Seq Scan ON servcon_poblaingas_11001 sp (cost=0.00..69937.59 ROWS=23441 width=59)
FILTER: ((periodo = 2011) AND (((nivsocio)::text = '2'::text) OR ((nivsocio)::text = '3'::text) OR ((nivsocio)::text = '4'::text) OR ((nivsocio)::text = '5'::text)))
pero no es que halla entendido de a mucho. que signfica todo eso, y con base en eso como podria modificarlo, para que sea mas rapido?
actualmente esta tabla tiene 2 indices, el de nivsocio y el de periodo, despues cree un indice compuesto de estos 2 pero el tiempo fue el mismo, pero nivsocio solo puede tomar 8 valores y periodo 10 valores, por lo tanto estos se repiten muchas veces en la tabla.