Over in "execExprInterp() questions / How to improve scalar array op
expr eval?" [1] I'd mused about how we might be able to optimized
scalar array ops with OR'd semantics.
This patch implements a binary search for such expressions when the
array argument is a constant so that we can avoid needing to teach
expression execution to cache stable values or know when a param has
changed.
The speed-up for the target case can pretty impressive: in my
admittedly contrived and relatively unscientific test with a query in
the form:
select count(*) from generate_series(1,100000) n(i) where i in (<1000
random integers in the series>)
shows ~30ms for the patch versus ~640ms on master.
James
[1]: https://www.postgresql.org/message-id/flat/CAAaqYe-UQBba7sScrucDOyHb7cDoNbWf_rcLrOWeD4ikP3_qTQ%40mail.gmail.com