From: | Alexander Jerusalem <alexander(dot)jerusalem(at)pop(dot)chello(dot)at> |
---|---|
To: | Bill Huff <bhuff(at)colltech(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Re: Re: LIKE and indexes? |
Date: | 2001-03-15 22:55:53 |
Message-ID: | 4.3.2.7.0.20010315235240.00ccc430@pop.chello.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Thanks a lot Bill, that did it! Now it takes only a quarter of a second or
so :-)
Alexander Jerusalem
At 23:33 15.03.01, Bill Huff wrote:
> Alexander,
>
> My guess is that MSSQL does a better job of optimizing the in clause.
>
> In postgres an in clause will not ( currently ) use an index, so it
> forces a sequential scan. However, you can change your query a bit and
> use exists which will use an existing index.
>
> SELECT count(*)
> FROM Person
> WHERE EXISTS (
> SELECT pcpc.pc_fromid
> FROM pcpc, corporation
> WHERE pcpc.pc_toid = corporation.pc_id AND
> Person.pc_Id = pcpc.pc_toid AND
> corporation.crp_name1 like 'Uni%' AND
> );
>
> That will allow the query to use an index on Person.pc_Id and
> pcpc.pc_toid assuming they exist.
>
>--
>Bill
>
>On Thu, Mar 15, 2001 at 11:16:47PM +0100, Alexander Jerusalem wrote:
> > Hi,
> >
> > The query I'm analyzing is this one:
> >
> > SELECT count(*) from Person WHERE Person.pc_Id in (select pcpc.pc_fromid
> > from pcpc inner join corporation on pcpc.pc_toid = corporation.pc_id where
> > corporation.crp_name1 ilike 'Uni%');
> >
> > Aggregate (cost=622544.96..622544.96 rows=1 width=0)
> > -> Seq Scan on person (cost=0.00..622526.04 rows=7565 width=0)
> > SubPlan
> > -> Materialize (cost=82.27..82.27 rows=1 width=36)
> > -> Nested Loop (cost=0.00..82.27 rows=1 width=36)
> > -> Seq Scan on corporation (cost=0.00..80.24
> > rows=1 width=12)
> > -> Index Scan using i_pcp_pc_toid on
> > pcpc (cost=0.00..2.02 rows=1 width=24)
> >
> >
> > The query takes over 3 seconds without any other load on the same machine
> > (Pentium III, 1 GHZ, 512 MB RAM) and I'm not sure why because on
> > MSSQLServer takes only a fraction. The tables are fairly small: the person
> > table has 7565 rows, the corporation table has 3059 and the relation table
> > (pcpc) has 2271 rows.
> >
> >
> > thanks,
> >
> > Alexander Jerusalem
> >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 5: Have you checked our extensive FAQ?
> >
> > http://www.postgresql.org/users-lounge/docs/faq.html
>
>--
> _____
> / ___/___ | Bill Huff / bhuff(at)colltech(dot)com
> / /__ __/ | Voice: (512) 263-0770 x 262
> / /__/ / | Fax: (512) 263-8921
> \___/ /ollective | Pager: 1-800-946-4646 # 1406217
> \/echnologies |------[ http://www.colltech.com ] ------
>
>---------------------------(end of broadcast)---------------------------
>TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
From | Date | Subject | |
---|---|---|---|
Next Message | Alexander Jerusalem | 2001-03-15 22:58:30 | Re: Re: Re: LIKE and indexes? |
Previous Message | Stephane | 2001-03-15 22:45:33 | troubles with libpq++ |