Re: 7.1.3 not using index

From: Daniel Kalchev <daniel(at)digsys(dot)bg>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: 7.1.3 not using index
Date: 2001-12-03 18:06:25
Message-ID: 200112031806.UAA21240@dcave.digsys.bg
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Tom,

You may be correct that sequential scan is preferable, but I can never get
version 7.1.3 to use index scan on almost any table. Here is the output of
your query:

attname | attdispersion | starelid | staattnum | staop | stanullfrac
| stacommonfrac | stacommonval | staloval | stahival
-----------------+---------------+----------+-----------+-------+-------------+
---------------+--------------+----------+----------
a | 0.978655 | 8160023 | 1 | 97 | 0
| 0.988079 | 1 | 1 | 52
b | 2.86564e-05 | 8160023 | 2 | 97 | 0
| 0.0001432 | 4971 | 1 | 12857
c | 0.000520834 | 8160023 | 3 | 97 | 0
| 0.0025776 | 1 | 1 | 11309
d | 0.104507 | 8160023 | 4 | 97 | 0
| 0.257437 | 8 | 1 | 32

In fact, field 'd' has only few values - usually powers of 2 (history). Values
are respectively 1,2,4,8. 16 and 32 and are spread like:

person_type | count
-------------+-------
1 | 8572
2 | 3464
4 | 8607
8 | 7191
16 | 3
32 | 96
(6 rows)

Some estimates are weird, such as:

db=# explain select * from r where d = 16;
NOTICE: QUERY PLAN:

Seq Scan on r (cost=0.00..527.16 rows=719 width=16)

I also tried the same query where the value exists only once in the table -
one would expect this is the perfect use of index...

I also note very slow response to any queries that access systems tables, such
as \d in psql.

Daniel

>>>Tom Lane said:
> Daniel Kalchev <daniel(at)digsys(dot)bg> writes:
> > (table has ~30k rows)
> > EXPLAIN SELECT * FROM r where d = 8;
> > The result is
> > NOTICE: QUERY PLAN:
> > Seq Scan on r (cost=0.00...3041.13 rows=7191 width=4)
>
> Seqscan is the right plan to retrieve 7k rows out of a 30k table.
> So the question is whether that estimate is in the right ballpark
> or not. How many rows are there really with d=8? If it's way off,
> what do you get from
>
> select attname,attdispersion,s.*
> from pg_statistic s, pg_attribute a, pg_class c
> where starelid = c.oid and attrelid = c.oid and staattnum = attnum
> and relname = 'r';
>
> regards, tom lane

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2001-12-03 18:19:19 Re: 7.1.3 not using index
Previous Message Tom Lane 2001-12-03 17:52:02 Re: Second call for platform testing