Thread: Partitioned tables not using index for min and max 8.2.7?
Hi
I am running the following query again a partitioned table in 8.2.7. It does index scans which is unexpected as there are indexes for the log_date column.
min(log_date) from data.table
"Aggregate (cost=739932.02..739932.02 rows=1 width=8)"
" -> Append (cost=0.00..685106.21 rows=21930321 width=8)"
" -> Seq Scan on table (cost=0.00..33827.10 rows=1215710 width=8)"
" -> Seq Scan on table_yy2009mm03 table (cost=0.00..88056.39 rows=438839 width=8)"
" -> Seq Scan on table_yy2009mm04 table (cost=0.00..204606.67 rows=7344967 width=8)"
" -> Seq Scan on table_yy2009mm05 table (cost=0.00..159210.91 rows=5735091 width=8)"
" -> Seq Scan on table_yy2009mm06 table (cost=0.00..199393.74 rows=7195574 width=8)"
" -> Seq Scan on table_yy2009mm07 table (cost=0.00..11.40 rows=140 width=8)"
though if i run it only agains the one table it is significantly faster and uses the index
select min(log_date) from only data.table
"Result (cost=0.06..0.07 rows=1 width=0)"
" InitPlan"
" -> Limit (cost=0.00..0.06 rows=1 width=8)"
" -> Index Scan using idx_table_log_date_only on table (cost=0.00..68272.93 rows=1215710 width=8)"
" Filter: (log_date IS NOT NULL)"
Am I doing something wrong or is this expected.
I tried the old method of
I am running the following query again a partitioned table in 8.2.7. It does index scans which is unexpected as there are indexes for the log_date column.
min(log_date) from data.table
"Aggregate (cost=739932.02..739932.02 rows=1 width=8)"
" -> Append (cost=0.00..685106.21 rows=21930321 width=8)"
" -> Seq Scan on table (cost=0.00..33827.10 rows=1215710 width=8)"
" -> Seq Scan on table_yy2009mm03 table (cost=0.00..88056.39 rows=438839 width=8)"
" -> Seq Scan on table_yy2009mm04 table (cost=0.00..204606.67 rows=7344967 width=8)"
" -> Seq Scan on table_yy2009mm05 table (cost=0.00..159210.91 rows=5735091 width=8)"
" -> Seq Scan on table_yy2009mm06 table (cost=0.00..199393.74 rows=7195574 width=8)"
" -> Seq Scan on table_yy2009mm07 table (cost=0.00..11.40 rows=140 width=8)"
though if i run it only agains the one table it is significantly faster and uses the index
select min(log_date) from only data.table
"Result (cost=0.06..0.07 rows=1 width=0)"
" InitPlan"
" -> Limit (cost=0.00..0.06 rows=1 width=8)"
" -> Index Scan using idx_table_log_date_only on table (cost=0.00..68272.93 rows=1215710 width=8)"
" Filter: (log_date IS NOT NULL)"
Am I doing something wrong or is this expected.
I tried the old method of
SELECT col FROM table ORDER BY col DESC LIMIT 1 But it does not work either.
-- Tim Haak Email: timh@lucidview.net Tel: +27 12 658 9019
Attachment
Tim Haak <timh@lucidview.net> writes: > I am running the following query again a partitioned table in 8.2.7. It > does index scans which is unexpected as there are indexes for the > log_date column. The index min/max optimization only works on single tables at the moment. Sorry. regards, tom lane
Cool thanks then not something I'm doing wrong :). Is this going to be changed or is changed in a latter version of postgres. (Do I need to do and upgrade or write a work around :) ) Tom Lane wrote: > Tim Haak <timh@lucidview.net> writes: > >> I am running the following query again a partitioned table in 8.2.7. It >> does index scans which is unexpected as there are indexes for the >> log_date column. >> > > The index min/max optimization only works on single tables at the > moment. Sorry. > > regards, tom lane > > -- Tim Haak Email: timh@lucidview.net Tel: +27 12 658 9019