Re: Query optimization problem

Поиск
Список
Период
Сортировка
От Robert Haas
Тема Re: Query optimization problem
Дата
Msg-id AANLkTi=bP=UuhEO8=m2ACKHrgDHMVGyHkMH1eS4xtpr9@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Query optimization problem  (Dimitri Fontaine <dfontaine@hi-media.com>)
Список pgsql-hackers
On Tue, Jul 20, 2010 at 3:33 PM, Dimitri Fontaine
<dfontaine@hi-media.com> wrote:
> Robert Haas <robertmhaas@gmail.com> writes:
>> On Tue, Jul 20, 2010 at 11:23 AM, Dimitri Fontaine
>> <dfontaine@hi-media.com> wrote:
>>>   JOIN DocPrimary d2 ON d2.BasedOn=d1.ID
>>> - WHERE (d1.ID=234409763) or (d2.ID=234409763)
>>> + WHERE (d2.BasedOn=234409763) or (d2.ID=234409763)
>>
>> I was thinking of the equivalence class machinery as well.  I think
>> the OR clause may be the problem.  If you just had d1.ID=constant, I
>> think it would infer that d1.ID, d2.BasedOn, and the constant formed
>> an equivalence class.  But here you obviously can't smash the constant
>> into the equivalence class, and I think the planner's not smart enough
>> to consider other ways of applying an equivalent qual.  In fact, I
>> have some recollection that Tom has explicitly rejected adding support
>> for this in the past, on the grounds that the computation would be too
>> expensive for the number of queries it would help.  Still, it seems to
>> keep coming up.
>
> Well what I'm thinking now could have nothing to do with how the code
> works. I'd have to check, but well, it's easier to write this mail and
> get the chance to have you wonder :)
>
> So, the JOIN condition teaches us that d2.BasedOn=d1.ID, and the OP
> would want the planner to derive that (d1.ID=234409763) is the same
> thing as (d2.BasedOn=234409763). I guess it would make sense to produce
> plans with both the writings and pick one based on the costs.
>
> Now, does it make sense to generate this many more plans to analyze in
> the general case, I have no idea about. But given only one join and only
> one WHERE clause where the Equivalent applies…

It seems like deciding which rel to apply the filter condition to
would be a fairly expensive optimization.  Perhaps we could recognize
the special case where substituting another member of the equivalence
class allows the qual to be pushed down where it otherwise couldn't
be.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: Finding slave WAL application time delay
Следующее
От: Robert Haas
Дата:
Сообщение: Re: multibyte charater set in levenshtein function