Acho isso meio misterioso. O custo de obter o valor máximo apenas da tabela pai da partição (que está vazia) é muito barato:
evlampts=# explain select max(timestamp) from only mcdata;
QUERY PLAN
-------------------------------------------------------------------------------------------------------
Result (cost=0.15..0.16 rows=1 width=0)
InitPlan 1 (returns $0)
-> Limit (cost=0.00..0.15 rows=1 width=8)
-> Index Scan Backward using mcdatatime_idx on mcdata (cost=0.00..19.20 rows=130 width=8)
Index Cond: ("timestamp" IS NOT NULL)
(5 rows)
Da mesma forma, o custo de obter o valor máximo apenas da partição mais nova é muito barato.
evlampts=# explain select max(timestamp) from mcdata_2011_09;
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------
Result (cost=3.17..3.18 rows=1 width=0)
InitPlan 1 (returns $0)
-> Limit (cost=0.00..3.17 rows=1 width=8)
-> Index Scan Backward using mcdata_2011_09_timestamp_idx on mcdata_2011_09 (cost=0.00..560255403.07 rows=176936192 width=8)
Index Cond: ("timestamp" IS NOT NULL)
(5 rows)
Aqui está a coisa estranha. Obter o máximo de toda a tabela particionada é muito caro. O PostgreSQL não parece produzir subplanos eficientes, embora haja apenas duas tabelas aqui (a master e uma partição) e ambas possam ser consultadas separadamente de forma eficiente.
evlampts=# explain select max(timestamp) from mcdata;
QUERY PLAN
-----------------------------------------------------------------------------------------------
Aggregate (cost=4663394.03..4663394.04 rows=1 width=8)
-> Append (cost=0.00..4221053.22 rows=176936322 width=8)
-> Seq Scan on mcdata (cost=0.00..11.30 rows=130 width=8)
-> Seq Scan on mcdata_2011_09 mcdata (cost=0.00..4221041.92 rows=176936192 width=8)
(4 rows)
Existe uma configuração ajustável que eu perdi ou esta é uma limitação que eu não entendo?
Obrigado!
Qual versao voce usa? A versão 9.1 tem uma grande melhoria para particionamento, verifique este blog de Greg Smith.
Ao usar a versão 9.1, obtenho este resultado para esta consulta
: