Re: [PERFORM] Query Optimizer Failure / Possible Bug

2005-04-10 Thread Hannes Dorbath
Mhh. I have no clue about the internals of PostgreSQL and query planing, 
but to me as user this should really be a thing the optimizer has to 
work out..

On 03.04.2005 10:01, PFC wrote:
Noticed this problem,too.
You can always make the calculation you want done once inside a set  
returning function so it'll behave like a table, but that's ugly.

On Mon, 28 Mar 2005 16:14:44 +0200, Hannes Dorbath  
[EMAIL PROTECTED] wrote:

hm, a few days and not a single reply :|
any more information needed? test data? simplified test case? anything?
thanks
Hannes Dorbath wrote:
The query and the corresponding EXPLAIN is at
 http://hannes.imos.net/query.txt
 I'd like to use the column q.replaced_serials for multiple calculations
in the SELECT clause, but every time it is referenced there in some way
the whole query in the FROM clause returning q is executed again.
 This doesn't make sense to me at all and eats performance.
 If this wasn't clear enough, for every
 q.replaced_serials insert_random_calculation AS some_column
 in the SELECT clause there is new block of
 ---
-  Aggregate  (cost=884.23..884.23 rows=1 width=0)
  -  Nested Loop  (cost=0.00..884.23 rows=1 width=0)
-  Index Scan using ix_rma_ticket_serials_replace on
rma_ticket_serials rts  (cost=0.00..122.35
rows=190 width=4)
  Index Cond: (replace = false)
-  Index Scan using pk_serials on serials s
  (cost=0.00..3.51 rows=1 width=4)
  Index Cond: (s.serial_id = outer.serial_id)
  Filter: ((article_no = $0) AND (delivery_id = $1))
---
 in the EXPLAIN result.
 For those who wonder why I do this FROM (SELECT...). I was 
searching  for
a way to use the result of an subselect for multiple calculations in the
SELECT clause and return that calculation results as individual columns.
 I tested a bit further and found out that PG behaves the same in case q
is a view. This makes me wonder how efficient the optimizer can work
with views - or even worse - nested views.
 Tested and reproduced on PG 7.4.1 linux and 8.0.0 win32.
  Thanks in advance,
Hannes Dorbath


---(end of broadcast)---
TIP 5: Have you checked our extensive FAQ?
  http://www.postgresql.org/docs/faq
---(end of broadcast)---
TIP 6: Have you searched our list archives?
  http://archives.postgresql.org


Re: [PERFORM] Query Optimizer Failure / Possible Bug

2005-04-03 Thread PFC
	Noticed this problem,too.
	You can always make the calculation you want done once inside a set  
returning function so it'll behave like a table, but that's ugly.

On Mon, 28 Mar 2005 16:14:44 +0200, Hannes Dorbath  
[EMAIL PROTECTED] wrote:

hm, a few days and not a single reply :|
any more information needed? test data? simplified test case? anything?
thanks
Hannes Dorbath wrote:
The query and the corresponding EXPLAIN is at
 http://hannes.imos.net/query.txt
 I'd like to use the column q.replaced_serials for multiple calculations
in the SELECT clause, but every time it is referenced there in some way
the whole query in the FROM clause returning q is executed again.
 This doesn't make sense to me at all and eats performance.
 If this wasn't clear enough, for every
 q.replaced_serials insert_random_calculation AS some_column
 in the SELECT clause there is new block of
 ---
-  Aggregate  (cost=884.23..884.23 rows=1 width=0)
  -  Nested Loop  (cost=0.00..884.23 rows=1 width=0)
-  Index Scan using ix_rma_ticket_serials_replace on
rma_ticket_serials rts  (cost=0.00..122.35
rows=190 width=4)
  Index Cond: (replace = false)
-  Index Scan using pk_serials on serials s
  (cost=0.00..3.51 rows=1 width=4)
  Index Cond: (s.serial_id = outer.serial_id)
  Filter: ((article_no = $0) AND (delivery_id = $1))
---
 in the EXPLAIN result.
 For those who wonder why I do this FROM (SELECT...). I was searching  
for
a way to use the result of an subselect for multiple calculations in the
SELECT clause and return that calculation results as individual columns.
 I tested a bit further and found out that PG behaves the same in case q
is a view. This makes me wonder how efficient the optimizer can work
with views - or even worse - nested views.
 Tested and reproduced on PG 7.4.1 linux and 8.0.0 win32.
  Thanks in advance,
Hannes Dorbath


---(end of broadcast)---
TIP 5: Have you checked our extensive FAQ?
  http://www.postgresql.org/docs/faq


Re: [PERFORM] Query Optimizer Failure / Possible Bug

2005-04-02 Thread Hannes Dorbath
hm, a few days and not a single reply :|
any more information needed? test data? simplified test case? anything?
thanks
Hannes Dorbath wrote:
The query and the corresponding EXPLAIN is at
http://hannes.imos.net/query.txt
I'd like to use the column q.replaced_serials for multiple calculations
in the SELECT clause, but every time it is referenced there in some way
the whole query in the FROM clause returning q is executed again.
This doesn't make sense to me at all and eats performance.
If this wasn't clear enough, for every
q.replaced_serials insert_random_calculation AS some_column
in the SELECT clause there is new block of
---
-  Aggregate  (cost=884.23..884.23 rows=1 width=0)
  -  Nested Loop  (cost=0.00..884.23 rows=1 width=0)
-  Index Scan using ix_rma_ticket_serials_replace on
rma_ticket_serials rts  (cost=0.00..122.35
rows=190 width=4)
  Index Cond: (replace = false)
-  Index Scan using pk_serials on serials s
  (cost=0.00..3.51 rows=1 width=4)
  Index Cond: (s.serial_id = outer.serial_id)
  Filter: ((article_no = $0) AND (delivery_id = $1))
---
in the EXPLAIN result.
For those who wonder why I do this FROM (SELECT...). I was searching for
a way to use the result of an subselect for multiple calculations in the
SELECT clause and return that calculation results as individual columns.
I tested a bit further and found out that PG behaves the same in case q
is a view. This makes me wonder how efficient the optimizer can work
with views - or even worse - nested views.
Tested and reproduced on PG 7.4.1 linux and 8.0.0 win32.
Thanks in advance,
Hannes Dorbath
--
imos  Gesellschaft fuer Internet-Marketing und Online-Services mbH
Alfons-Feifel-Str. 9 // D-73037 Goeppingen  // Stauferpark Ost
Tel: 07161 93339-14 // Fax: 07161 93339-99 // Internet: www.imos.net
---(end of broadcast)---
TIP 3: if posting/reading through Usenet, please send an appropriate
 subscribe-nomail command to [EMAIL PROTECTED] so that your
 message can get through to the mailing list cleanly


Re: [PERFORM] Query Optimizer Failure / Possible Bug

2005-03-28 Thread Josh Berkus
Hannes,

 The query and the corresponding EXPLAIN is at

 http://hannes.imos.net/query.txt

The problem is that you're using a complex corellated sub-select in the SELECT 
clause:

SELECT
  d.delivery_id,
  da.article_no,
  da.amount,
  (
  SELECT
COUNT(*)
  FROM
serials s
INNER JOIN rma_ticket_serials rts ON (
s.serial_id = rts.serial_id
)
  WHERE
s.article_no  = da.article_no AND
s.delivery_id = d.delivery_id AND
rts.replace   = FALSE
  ) AS replaced_serials

This means that the planner pretty much has to iterate over the subquery, 
running it once for each row in the result set.   If you want the optimizer 
to use a JOIN structure instead, put the subselect in the FROM clause.

-- 
--Josh

Josh Berkus
Aglio Database Solutions
San Francisco

---(end of broadcast)---
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]


[PERFORM] Query Optimizer Failure / Possible Bug

2005-03-27 Thread Hannes Dorbath
The query and the corresponding EXPLAIN is at
http://hannes.imos.net/query.txt
I'd like to use the column q.replaced_serials for multiple calculations
in the SELECT clause, but every time it is referenced there in some way
the whole query in the FROM clause returning q is executed again.
This doesn't make sense to me at all and eats performance.
If this wasn't clear enough, for every
q.replaced_serials insert_random_calculation AS some_column
in the SELECT clause there is new block of
---
-  Aggregate  (cost=884.23..884.23 rows=1 width=0)
  -  Nested Loop  (cost=0.00..884.23 rows=1 width=0)
-  Index Scan using ix_rma_ticket_serials_replace on 

rma_ticket_serials rts  (cost=0.00..122.35
rows=190 width=4)
  Index Cond: (replace = false)
-  Index Scan using pk_serials on serials s
  (cost=0.00..3.51 rows=1 width=4)
  Index Cond: (s.serial_id = outer.serial_id)
  Filter: ((article_no = $0) AND (delivery_id = $1))
---
in the EXPLAIN result.
For those who wonder why I do this FROM (SELECT...). I was searching for
a way to use the result of an subselect for multiple calculations in the
SELECT clause and return that calculation results as individual columns.
I tested a bit further and found out that PG behaves the same in case q
is a view. This makes me wonder how efficient the optimizer can work
with views - or even worse - nested views.
Tested and reproduced on PG 7.4.1 linux and 8.0.0 win32.
Thanks in advance,
Hannes Dorbath
---(end of broadcast)---
TIP 6: Have you searched our list archives?
  http://archives.postgresql.org