On 14.06.2011 18:29, Tom Lane wrote:
Svetlin Manavski<svetlin.manavski@xxxxxxxxx> 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
--
Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance