Some ORMs or proprietary software may write it mistakenly. In these
cases this idea may be helpful.
This patch contains GUC to enable/disable this optimization
On 10/3/24 23:19, Laurenz Albe wrote:
On Thu, 2024-10-03 at 23:10 +0300, Alena Rybakina wrote:
On 03.10.2024 22:52, Ivan Kush wrote:
Hello, hackers! I with my friends propose the patch to replace IN
VALUES to ANY in WHERE clauses.
# Intro
The `VALUES` in the `IN VALUES` construct is replaced with with an
array of values when `VALUES` contains 1 column. In the end it will be
replaced with ANY by the existing function makeA_Expr
(src/backend/nodes/makefuncs.c)
This improves performance, especially if the values are small.
Anlrey Lepikhov and I recently described this in an article [0] here and
the implementation already exists, but for now it was posted a binary
application for testing. The acceleration is significant I agree.
[0] https://danolivo.substack.com/p/7456653e-9716-4e91-ad09-83737784c665
I believe that the speed improvement is significant, but who writes a
query like
... WHERE col IN (VALUES (1), (2), (3))
when they could write the much shorter
... WHERE col IN (1, 2, 3)
which is already converted to "= ANY"?
I wonder if it is worth the extra planning time to detect and improve
such queries.
Yours,
Laurenz Albe
--
Best wishes,
Ivan Kush
Tantor Labs LLC