Re: Optimizing queries
| От | Patrice Beliveau |
|---|---|
| Тема | Re: Optimizing queries |
| Дата | |
| Msg-id | 44D9CF6E.9030900@avior.ca обсуждение исходный текст |
| Ответ на | Re: Optimizing queries (Tom Lane <tgl@sss.pgh.pa.us>) |
| Ответы |
Re: Optimizing queries
Re: Optimizing queries |
| Список | pgsql-performance |
Tom Lane wrote:
> Patrice Beliveau <pbeliveau@avior.ca> writes:
>
>>>> SELECT * FROM TABLE
>>>> WHERE TABLE.COLUMN1=something
>>>> AND TABLE.COLUMN2=somethingelse
>>>> AND function(TABLE.COLUMN3,TABLE.COLUMN4) > 0;
>>>>
>
>
>> I find out that the function process every row even if the row should be
>> rejected as per the first or the second condition.
>> ... I'm using version 8.1.3
>>
>
> PG 8.1 will not reorder WHERE clauses for a single table unless it has
> some specific reason to do so (and AFAICT no version back to 7.0 or so
> has done so either...) So there's something you are not telling us that
> is relevant. Let's see the exact table schema (psql \d output is good),
> the exact query, and EXPLAIN output for that query.
>
> regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
> choose an index scan if your joining column's datatypes do not
> match
>
>
>
Hi,
here is my query, and the query plan that result
explain select * from (
select * from sales_order_delivery
where sales_order_id in (
select sales_order_id from sales_order
where closed=false
)
) as a where outstandingorder(sales_order_id, sales_order_item,
date_due) > 0;
QUERY PLAN
----------------------------------------------------------------------------------------------------------------------
Hash IN Join (cost=498.89..8348.38 rows=34612 width=262)
Hash Cond: (("outer".sales_order_id)::text =
("inner".sales_order_id)::text)
-> Seq Scan on sales_order_delivery (cost=0.00..6465.03 rows=69223
width=262)
Filter: (outstandingorder((sales_order_id)::text,
(sales_order_item)::text, date_due) > 0::double precision)
-> Hash (cost=484.90..484.90 rows=5595 width=32)
-> Seq Scan on sales_order (cost=0.00..484.90 rows=5595 width=32)
Filter: (NOT closed)
(7 rows)
В списке pgsql-performance по дате отправления: