On 1 Mar 2007, at 11:28, Tom Lane wrote:

> "" <[EMAIL PROTECTED]> writes:
> > Description:        Performance BUG
> 
> You haven't actually shown us any bug.  These are not the same query
> and there's no reason to expect them to take the same amount of time.
> 
>    regards, tom lane
> 
Hi, Tom!
Sorry for long reply delay.
Yes. Both previous samples is different,
but I speak about incorrect planner work - see multiple 'aggregate'.
Try as alternative next sample:
drop table t1;
create table t1 (i4 int4);
insert into t1 SELECT generate_series(1,999);
vacuum analyze;
EXPLAIN ANALYZE
SELECT i4,x1,huge.x1+huge.x1+huge.x1+huge.x1+huge.x1 FROM
(SELECT i4,c1+i4+random()*0 as x1 FROM (
-- --------------^^^^^^^^^^-----------------------
SELECT i4,(SELECT COUNT(1) FROM t1 AS subselect WHERE 
i4<main_table.i4)+i4
AS c1
FROM t1  main_table
) AS external) AS HUGE
ORDER BY i4-huge.x1+huge.x1+huge.x1+huge.x1+huge.x1;

and compare timing/planner results in cases with and without
'+random()*0' part.

On my test hardware I receive results:
with '+random()*0' - 2818ms
w/o  '+random()*0' - 30527ms.

I believe that plan for case with '+random()*0' more correct, see it 
below:
Sort  (cost=18428.88..18431.38 rows=999 width=12) (actual 
time=2816.722..2818.681 rows=999 loops=1)
  Sort Key: ((((((i4)::double precision - x1) + x1) + x1) + x1) + x1)
  ->  Subquery Scan huge  (cost=0.00..18379.11 rows=999 width=12) 
(actual time=1.350..2810.169 rows=999 loops=1)
        ->  Seq Scan on t1 main_table  (cost=0.00..18344.14 rows=999 
width=4) (actual time=1.312..2791.659 rows=999 loops=1)
              SubPlan
                ->  Aggregate  (cost=18.32..18.33 rows=1 width=0) 
(actual time=2.758..2.760 rows=1 loops=999)
                      ->  Seq Scan on t1 subselect  (cost=0.00..17.49 
rows=333 width=0) (actual time=0.055..1.736 rows=499 loops=999)
                            Filter: (i4 < $0)
Total runtime: 2821.200 ms

Best regards,
 Alexander Kirpa



---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to