I get unexpected query strategy when using coalesce.
Good:
-----
explain update zzz set
b = (select x.newVal from zzz_xref x where x.oldVal = zzz.b);
NOTICE: QUERY PLAN:
Seq Scan on zzz (cost=0.00..20.00 rows=1000 width=10)
SubPlan
-> Index Scan using zzz_xref_ix2 on zzz_xref x (cost=0.00..726.82
rows=983 width=4)
Bad (just by adding a COALESCE call):
-------------------------------------
explain update zzz set
b = coalesce((select x.newVal from zzz_xref x where x.oldVal =
zzz.b),b);
NOTICE: QUERY PLAN:
Seq Scan on zzz (cost=0.00..20.00 rows=1000 width=10)
SubPlan
-> Index Scan using zzz_xref_ix2 on zzz_xref x (cost=0.00..726.82
rows=983 width=4)
-> Seq Scan on zzz_xref x (cost=0.00..1757.80 rows=98304 width=4)
Does this make sense?
P.S. There are indexes on both oldVal and newVal in zzz_xref, and table zzz
has one column (b).
----------------------------------------------------------------
Philip Warner | __---_____
Albatross Consulting Pty. Ltd. |----/ - \
(A.C.N. 008 659 498) | /(@) ______---_
Tel: (+61) 0500 83 82 81 | _________ \
Fax: (+61) 0500 83 82 82 | ___________ |
Http://www.rhyme.com.au | / \|
| --________--
PGP key available upon request, | /
and from pgp5.ai.mit.edu:11371 |/