From: | Li Jin <ljin(at)tripadvisor(dot)com> |
---|---|
To: | Robert Klemme <shortcutter(at)googlemail(dot)com> |
Cc: | Merlin Moncure <mmoncure(at)gmail(dot)com>, pgsql-performance(at)postgresql(dot)org |
Subject: | Re: Performance penalty when using WITH |
Date: | 2011-08-03 13:27:11 |
Message-ID: | D64784E1-ACFF-4CC8-93E9-EE86620BBF01@tripadvisor.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Robert,
I've built an index on this expression firstname || ' ' || substring(lastname,1,1). I believe this is the best index for this particular query. Correct me if I am wrong.
Li
On Aug 3, 2011, at 3:18 AM, Robert Klemme wrote:
> On Tue, Aug 2, 2011 at 11:48 PM, Merlin Moncure <mmoncure(at)gmail(dot)com> wrote:
>> On Sat, Jul 30, 2011 at 8:10 AM, Robert Klemme
>> <shortcutter(at)googlemail(dot)com> wrote:
>>> On Thu, Jul 28, 2011 at 11:00 PM, Li Jin <ljin(at)tripadvisor(dot)com> wrote:
>>>> I met with the problem that when I was using WITH clause to reuse a
>>>> subquery, I got a huge performance penalty because of query planner.
>>>> Here are the details, the original query is
>>>> EXPLAIN ANALYZE WITH latest_identities AS
>>>> (
>>>> SELECT DISTINCT ON (memberid) memberid, username, changedate
>>>> FROM t_username_history
>>>> WHERE memberid IN (SELECT memberid FROM t_member WHERE firstname || ' '
>>>> || substring(lastname,1,1) = 'Eddie T')
>>>> ORDER BY memberid, changedate DESC
>>>> )
>>>
>>> Another observation: That criterion looks suspicious to me. I would
>>> expect any RDBMS to be better able to optimize this:
>>>
>>> WHERE firstname = 'Eddie' AND lastname like 'T%'
>>>
>>> I know it's semantically not the same but I would assume this is good
>>> enough for the common usecase. Plus, if there is an index on
>>> (firstname, lastname) then that could be used.
>>
>> disagree. just one of the ways that could be stymied would to change
>> the function behind the '||' operator.
>
> I don't understand what you mean. Can you please elaborate?
>
> To explain my point a bit: I meant that by querying individual fields
> separately instead of applying a criterion on a function of the two
> the RDBMS has a better chance to use indexes and come up with a better
> plan for this part of the query.
>
> Kind regards
>
> robert
>
> --
> remember.guy do |as, often| as.you_can - without end
> http://blog.rubybestpractices.com/
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2011-08-03 13:29:16 | Re: Re: GROUP BY with reasonable timings in PLAN but unreasonable execution time |
Previous Message | Sumeet Jauhar | 2011-08-03 07:35:29 | Suspected Postgres Datacorruption |