| From: | Stephan Szabo <sszabo(at)megazone(dot)bigpanda(dot)com> |
|---|---|
| To: | Merlin Moncure <merlin(dot)moncure(at)rcsonline(dot)com> |
| Cc: | Carlos Benkendorf <carlosbenkendorf(at)yahoo(dot)com(dot)br>, pgsql-performance(at)postgresql(dot)org |
| Subject: | Re: Improving performance of a query |
| Date: | 2005-09-06 14:09:08 |
| Message-ID: | 20050906070119.K35524@megazone.bigpanda.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-performance |
On Tue, 6 Sep 2005, Merlin Moncure wrote:
> Carlos wrote:
> SELECT * FROM SSIRRA where
> (YEAR = 2004 and CUSTOMER = 0000000004 and CODE = 00 and PART >= 00) or
> (YEAR = 2004 and CUSTOMER = 0000000004 and CODE > 00) or
> (YEAR = 2004 and CUSTOMER > 0000000004) or
> (YEAR > 2004)
> [snip]
>
> ah, the positional query. You can always rewrite this query in the
> following form:
>
> (YEAR >= 2004) and
> (YEAR = 2004 or CUSTOMER >= 0000000004) and
> (YEAR = 2004 or CUSTOMER = 0000000004 or CODE >= 00) and
> (YEAR = 2004 or CUSTOMER = 0000000004 or CODE = 00 or PART > 00)
Unless I'm not seeing something, I don't think that's a correct
reformulation in general. If customer < 4 and year > 2004 the original
clause would return true but the reformulation would return false since
(year=2004 or customer >= 4) would be false.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Marc Cousin | 2005-09-06 14:12:27 | insert performance for win32 |
| Previous Message | Merlin Moncure | 2005-09-06 12:59:46 | Re: Improving performance of a query |