Why the 8.1 plan is worst than 7.4?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, 

I have 2 servers, one of them has a 7.4 postgres and the other has a 8.1 

I have this query: 

select fagrempr,fagrdocr,fagrserr,fagrparr 
from arqcfat 
left join arqfagr on fagrorig = 'CFAT' and fagrdocu = cfatdocu and fagrempe 
= cfatempe and fagrseri = cfatseri 
where cfatdata between '2006-01-01' and '2006-01-31' 
and cfattipo = 'VD' 
and cfatstat <> 'C' 
and fagrform = 'CT' 
and fagrtipr = 'REC' 
group by fagrempr,fagrdocr,fagrserr,fagrparr 

The 8.1 give me this plan: 

 HashAggregate  (cost=59.07..59.08 rows=1 width=20) 
   ->  Nested Loop  (cost=0.00..59.06 rows=1 width=20) 
         ->  Index Scan using arqfagr_arqfa3_key on arqfagr  
(cost=0.00..53.01 rows=1 width=36) 
               Index Cond: ((fagrorig = 'CFAT'::bpchar) AND (fagrform = 
'CT'::bpchar)) 
               Filter: (fagrtipr = 'REC'::bpchar) 
         ->  Index Scan using arqcfat_arqcfat1_key on arqcfat  
(cost=0.00..6.03 rows=1 width=16) 
               Index Cond: (("outer".fagrempe = arqcfat.cfatempe) AND 
("outer".fagrdocu = arqcfat.cfatdocu) AND ("outer".fagrseri = 
arqcfat.cfatseri)) 
               Filter: ((cfatdata >= '01-01-2006'::date) AND (cfatdata <= 
'31-01-2006'::date) AND (cfattipo = 'VD'::bpchar) AND (cfatstat <> 
'C'::bpchar)) 

The 7.4 give me this plan: 

HashAggregate  (cost=2163.93..2163.93 rows=1 width=19) 
   ->  Nested Loop  (cost=0.00..2163.92 rows=1 width=19) 
         ->  Index Scan using arqcfat_arqcfat2_key on arqcfat  
(cost=0.00..2145.78 rows=3 width=15) 
               Index Cond: ((cfatdata >= '01-01-2006'::date) AND (cfatdata 
<= '31-01-2006'::date)) 
               Filter: ((cfattipo = 'VD'::bpchar) AND (cfatstat <> 
'C'::bpchar)) 
         ->  Index Scan using arqfagr_arqfa1_key on arqfagr  
(cost=0.00..6.03 rows=1 width=34) 
               Index Cond: ((arqfagr.fagrorig = 'CFAT'::bpchar) AND 
(arqfagr.fagrempe = "outer".cfatempe) AND (arqfagr.fagrdocu = 
"outer".cfatdocu) AND (arqfagr.fagrseri = "outer".cfatseri)) 
               Filter: ((fagrform = 'CT'::bpchar) AND (fagrtipr = 
'REC'::bpchar)) 

Why the plan is worst in postgres 8.1? 

I know the best plan is read fisrt the table which has a date index as the 
7.4 did, because in a few days I will have few lines too, so the query will 
be faster. 

Is there some thing I have to change in 8.1 to make the plans as the 7.4? 

Thanks , 

Waldomiro C. Neto. 




[Postgresql General]     [Postgresql PHP]     [PHP Users]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Yosemite]

  Powered by Linux