X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.193]) by svr1.postgresql.org (Postfix) with ESMTP id 0590B30D1B6 for ; Thu, 12 Jun 2003 12:32:39 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (svr1.postgresql.org [64.117.224.193]) (amavisd-new, port 10024) with ESMTP id 59926-02 for ; Thu, 12 Jun 2003 09:32:28 -0300 (ADT) Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by svr1.postgresql.org (Postfix) with ESMTP id 3BFF430D175 for ; Thu, 12 Jun 2003 09:32:28 -0300 (ADT) Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with SMTP id EB94EDC03; Thu, 12 Jun 2003 12:32:27 +0000 (GMT) Received: by zeta.dmz-eu.st.com (STMicroelectronics, from userid 0) id C9E01618C; Thu, 12 Jun 2003 12:32:27 +0000 (GMT) Received: from agx003.agr.st.com (localhost [127.0.0.1]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 391CD1849; Thu, 12 Jun 2003 12:32:27 +0000 (GMT) Received: from st.com (web.rdd.agr.st.com [164.130.32.138]) by agx003.agr.st.com (8.9.3 (PHNE_24419+JAGae58098)/8.9.3) with ESMTP id OAA12512; Thu, 12 Jun 2003 14:32:25 +0200 (METDST) Message-ID: <3EE87218.79B810F@st.com> Date: Thu, 12 Jun 2003 14:29:12 +0200 From: Marco Vezzoli X-Mailer: Mozilla 4.76 [en] (X11; U; SunOS 5.8 sun4u) X-Accept-Language: en MIME-Version: 1.0 To: bruno@wolff.to Cc: pgsql-sql@postgresql.org Subject: Re: multiple index search with postgres7.1.3 on solaris 8 References: <3EE8621D.F6A261AE@st.com> <20030612120722.GB1285@wolff.to> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Archive-Number: 200306/108 X-Sequence-Number: 13866 bruno@wolff.to wrote: > > On Thu, Jun 12, 2003 at 13:21:01 +0200, > Marco Vezzoli wrote: > > Hi everybody, > > I'm sorry if this topic has already been explained, but the search > > engine at archives.postgresql.org shows me 10 pages of results but > > without any link (!). > > I'm using postgres 7.1.3 on Solaris 8; I would like to do some query of > > this form > > > > SELECT * FROM table WHERE (attribute1,attribute2) IN > > ((value1_0,value2_0),(value1_1,value2_1) ...) > > > > (which is legal on oracle 8i on solaris 8). > > I know this has an equivalent boolean expression but: > > -I would like to use an index defined like > > CREATE INDEX myindex ON table(attribute1,attribute2) > > -the pairs in the list can be many (up to 100) > > or'ing IN terms together is probably going to result in the same plan that > you are describing above (assuming table has a large enough number > of rows). I don't know if this way of writing the query can generate > a sort of values you are checking against and then a merge join. > For just a hundred or so values I don't think this plan would be that > much better than both nest loop and multiple index scans. However, if > you want to get that plan and or'ing INs won't generate it, then you could > try union'ing the values together in the IN value list. 7.4 will likely > behave differently than pre 7.4 versions. Thanks for the answer, it works (i.e. the planner uses the index). Is the query limited in length (in characters)? Marco -- Marco Vezzoli tel. +39 039 603 6852 STMicroelectronics fax. +39 039 603 5055