Binary search in ScalarArrayOpExpr for OR'd constant arrays
James Coleman <jtc331@gmail.com>
From: James Coleman <jtc331@gmail.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2020-04-21T01:27:34Z
Lists: pgsql-hackers
Attachments
- v1-0001-Binary-search-const-arrays-in-OR-d-ScalarArrayOps.patch (text/x-patch) patch v1-0001
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
Commits
-
Use a hash table to speed up NOT IN(values)
- 29f45e299e7f 15.0 landed
-
Speedup ScalarArrayOpExpr evaluation
- 50e17ad281b8 14.0 landed