Re: IN list processing performance (yet again)
Dave Tenny <tenny@attbi.com>
From: Dave Tenny <tenny@attbi.com>
To: Bruno Wolff III <bruno@wolff.to>
Cc: Shridhar Daithankar <shridhar_daithankar@persistent.co.in>, pgsql-performance@postgresql.org
Date: 2003-05-28T20:13:17Z
Lists: pgsql-performance
Bruno Wolff III wrote: >On Wed, May 28, 2003 at 13:58:14 -0400, > Dave Tenny <tenny@attbi.com> wrote: > > >>A join isn't an option, these elements come a a selection of entity ID's >>that are specific to some client context. >>Some other people suggested joins too. >> >> > >You can union the values together and then join (or use where exists) with the >result. This may not be faster and you may not be able to union several >thousand selects together in a single statement. But it shouldn't be too >much work to test it out. > > I assume you mean something like: test=# select million.id, million.val from million, (select 10000 as a union select 20000 as a) t2 where million.id = t2.a; id | val -------+------- 10000 | 0 20000 | 10000 (2 rows) Ouch! That's deviant. Haven't tried it yet and I cringe at the thought of it, but I might take a run at it. However that's going to run up the buffer space quickly. That was one of my as yet unsnaswered questions, what is the pragmatic buffer size limit for queries? I'm /really/ hoping we'll come up with something better, like an understanding of why IN lists are non-linear in the first place when the column is indexed, and whether it's fixable through some other means or whether it's a bug that should be fixed. After all, I'm trying to support multiple databases, and other databases kick butt on this. It's just postgresql that's having difficulty. (Btw, I've also tried statement batching, but that's a lose for now, at least with the current JDBC drivers and 7.3.2).