From: | Vladimir Sitnikov <sitnikov(dot)vladimir(at)gmail(dot)com> |
---|---|
To: | Alessandro Gherardi <alessandro(dot)gherardi(at)yahoo(dot)com> |
Cc: | pgsql-jdbc(at)lists(dot)postgresql(dot)org |
Subject: | Re: IN or ANY for batch queries |
Date: | 2018-05-28 10:34:19 |
Message-ID: | CAB=Je-HGL1LbhfH=2y67Dq_ysex4cj=jvwb7K34+qQM+6ntceQ@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Hi,
>However, since in my application the number of values in the array can
vary, I'm wondering if using ANY has the benefit of causing the driver/DB
to cache a smaller number of prepared statement.
Right you are. In case you use Array, the whole thing is passed as a single
bind, and it results in a single prepared statement.
Naive use of (?, ?, ?, ?, ?) would result in multiple prepared statements
that would consume memory at both client and server sides.
1) Note: sometimes you might want to use (?, ?, ?) kind of syntax (e.g. to
support DBs that cannot process arrays), then you might want to use "power
of two" placeholders, and fill the excessive ones with null value or with a
repetition of the last value.
For instance, if you want to pass 5 values 1,2,3,4,5 you'd better pass it as
(1,2,3,4,5,5,5,5) (of course, use ?,?,?,?, ?,?,?,? )
I do not advice you to use that extensively, however it is a nice to know
trick.
2) As "array-based-SQL" is the same statement, you will get pretty much the
same execution plan no matter how many values you put there.
I find that a plus since I do not want my application to flip to some nasty
"table seq scan" as the number of values flips from 21 to 22 or whatever.
The execution plan might vary in case you use variable number of "?".
3) Of course, if you plan to move lots of data, then COPY and/or insert
batch (+ reWriteBatchedInserts=true) might be your friends there.
4) Note: array support is limited, so currently you might fail to pass
"array of composite type".
Vladimir
From | Date | Subject | |
---|---|---|---|
Next Message | Craig Ringer | 2018-05-28 13:01:18 | Re: IN or ANY for batch queries |
Previous Message | Craig Ringer | 2018-05-28 01:37:10 | Re: IN or ANY for batch queries |