Re: why is this index not being used? - Mailing list pgsql-general

From scott.marlowe
Subject Re: why is this index not being used?
Date
Msg-id Pine.LNX.4.33.0403081304130.2365-100000@css120.ihs.com
Whole thread Raw
In response to why is this index not being used?  (<mike@linkify.com>)
List pgsql-general
On Fri, 5 Mar 2004 mike@linkify.com wrote:

>
> Hey all,
>
> I'm using PostgreSQL 7.3.4.
>
> I have a query that isn't using a particular index, and I'm wondering why.
>
> The query is:
> select i.ItemID, d.Extension from ITEM i, SHARING s, DOCUMENT d where
> i.ItemID = d.ItemID AND s.ItemID = i.DomainID AND s.UserIDOfSharee = 12
>
> Item's primary key is ItemID.
> Document's primary key is ItemID.
> Sharing's primary key is (ItemID, UserIDOfSharee).
> Item has index item_ix_item_3_idx on (DomainID, ItemID).
> Sharing has index sharing_ix_sharing_1_idx on (UserIDOfSharee, ItemID).
>
> Explain says:
> Hash Join  (cost=25526.26..31797.78 rows=6105 width=23)
>   Hash Cond: ("outer".itemid = "inner".itemid)
>   ->  Seq Scan on document d  (cost=0.00..5629.14 rows=113214 width=11)
>   ->  Hash  (cost=25502.60..25502.60 rows=9465 width=12)
>         ->  Merge Join  (cost=310.16..25502.60 rows=9465 width=12)
>               Merge Cond: ("outer".domainid = "inner".itemid)
>               ->  Index Scan using item_ix_item_3_idx on item i
> (cost=0.00..24634.71 rows=175519 width=8)
>               ->  Sort  (cost=310.16..310.47 rows=123 width=4)
>                     Sort Key: s.itemid
>                     ->  Index Scan using sharing_ix_sharing_1_idx on
> sharing s  (cost=0.00..305.88 rows=123 width=4)
>                           Index Cond: (useridofsharee = 12)
>
>
> Why is there a Seq Scan on Document?  How can I get it to use Document's
> primary key?

Rerun that query with explain analyze to see the difference between what
the planner expected in terms of numbers of rows, and what it really got.

Note that the sequential scan is happening on a table that the planner
thinks it is going to get 113214 rows back.  If the width of that table
really does average only 11, then it is likely you can fit many many
tuples in a single page, and if the number of rows in said table are
anything less than a couple million, it is unlikely that an index scan is
an win, as only selecting 5% of the table looks like it will hit every
page.

->  Seq Scan on document d  (cost=0.00..5629.14 rows=113214 width=11)

You can try "set enable_seqscan = off" and see if the query runs any
faster, by the way.


pgsql-general by date:

Previous
From: Kris Jurka
Date:
Subject: Re: Character Encoding Confusion
Next
From: javier garcia - CEBAS
Date:
Subject: creating sequential timestamp