Re: need to repeat the same condition on joined tables in order to choose the proper plan
От | Robert Klemme |
---|---|
Тема | Re: need to repeat the same condition on joined tables in order to choose the proper plan |
Дата | |
Msg-id | it8fs4$vlh$1@dough.gmane.org обсуждение исходный текст |
Ответ на | Re: need to repeat the same condition on joined tables in order to choose the proper plan (Tom Lane <tgl@sss.pgh.pa.us>) |
Список | pgsql-performance |
On 14.06.2011 18:29, Tom Lane wrote: > Svetlin Manavski<svetlin.manavski@gmail.com> writes: >> I am really surprised to see that the planner needs me to explicitly specify >> the same condition twice like this: > >> SD.detectorid = SS.detectorid >> and SD.sessionid = SS.id >> and SD.detectorid = 1 >> and SD.sessionid>= 1001000000000::INT8 and SD.sessionid<= >> 2001000000000::INT8 >> and SS.detectorid = 1 >> and SS.id>= 1001000000000::INT8 and SS.id<= 2001000000000::INT8 > > The planner does infer implied equalities, eg, given A = B and B = C > it will figure out that A = C. What you are asking is for it to derive > inequalities, eg infer A< C from A = B and B< C. That would be > considerably more work for considerably less reward, since the sort of > situation where this is helpful doesn't come up very often. On balance > I don't believe it's a good thing for us to do: I think it would make > PG slower on average because on most queries it would just waste time > looking for this sort of situation. > > (In this example, the SS.detectorid = 1 clause is in fact unnecessary, > since the planner will infer it from SD.detectorid = SS.detectorid and > SD.detectorid = 1. But it won't infer the range conditions on SS.id > from the range conditions on SD.sessionid or vice versa.) Is that the same for IN? Would it help in this particular case to use a and SS.id in (select ... where ... > and ... < ...) or with a CTE? Kind regards robert
В списке pgsql-performance по дате отправления: