On Tue, 16 Jun 2009, Alberto Dalmaso wrote:
>> What does your postgresql.conf file look like?
> enable_hashjoin = off
> enable_nestloop = off
> enable_seqscan = off
> enable_sort = off
Why are these switched off?
> and that is the explain of the too slow simple query
>
> "Merge Join (cost=0.00..1032305.52 rows=4 width=12)"
> " Merge Cond: (domande.id_dichiarazione = c_elaout.id_domanda)"
> " -> Index Scan using "IDX_8_domande" on domande (cost=0.00..8.39
> rows=1 width=4)"
> " Index Cond: (id_domanda = 4165757)"
> " -> Index Scan using "IDX_2_c_elaout" on c_elaout
> (cost=0.00..1030283.89 rows=805279 width=12)"
> " Filter: ((c_elaout.node)::text = 'Invalido'::text)"
>
> this cost 15 sec
>
>
> with mergejoin to off:
>
> "Nested Loop (cost=100000000.00..100000022.97 rows=4 width=12)"
> " -> Index Scan using "IDX_8_domande" on domande (cost=0.00..8.39
> rows=1 width=4)"
> " Index Cond: (id_domanda = 4165757)"
> " -> Index Scan using "IDX_2_c_elaout" on c_elaout (cost=0.00..14.54
> rows=4 width=12)"
> " Index Cond: (c_elaout.id_domanda = domande.id_dichiarazione)"
> " Filter: ((c_elaout.node)::text = 'Invalido'::text)"
>
> this cost 15 msec!!!
Well duh. What you're effectively doing is telling Postgres to NEVER use a
nested loop. Then you're getting upset because it isn't using a nested
loop. When you tell it to NEVER use anything (switching all join
algorithms off), it ignores you and chooses the right plan anyway.
Matthew
--
You can configure Windows, but don't ask me how. -- Bill Gates