I have a table with 85M rows :
CREATE TABLE emissions_totales (
"schema_source" varchar(150),
"snap" varchar(20),
"gid" varchar(255),
"polluant" varchar(50),
"emi" float8,
"numreg" varchar(3),
"unites" varchar(60),
"annee_ref" varchar(4),
"type_source_n1" varchar(255),
"type_source_n2" varchar(255),
"type_source_n3" varchar(255),
"napfue" varchar(15),
"naf_rev2" varchar(10),
"entite" varchar(255),
"id" int4)
but a query like this one:
SELECT
numreg,
annee_ref,
type_source_n1,
polluant,
unites,
sum(emi) as emi
FROM emissions_synthese.emissions_totales
WHERE schema_source='residentiel'
GROUP BY
numreg,
annee_ref,
type_source_n1,
polluant,
unites;
takes more than 3 hours to perform. What is the best way to make indexes? Do I have to make unique index on schema_source
, numreg
, annee_ref
, type_source_n1
, polluant
and unites
or a multicolumn index?
I have modified the postgresql.conf
file by reading various sites, do I have to change something?
shared_buffers = 956MB
work_mem = 5MB
maintenance_work_mem = 128MB
checkpoint_segments = 64
checkpoint_timeout = 5min
checkpoint_completion_target = 0.9
effective_cache_size = 2304MB
(postgresql 8.4 on Debian Squeeze, 3.0 Go RAM, 2 Intel Xeon E5345 CPU)