Thread

  1. Explain reports unexpected results with inheritance

    PostgreSQL Bugs List <pgsql-bugs@postgresql.org> — 2001-02-14T18:21:02Z

    David Lynn (davidl@ayamba.com) reports a bug with a severity of 3
    The lower the number the more severe it is.
    
    Short Description
    Explain reports unexpected results with inheritance
    
    Long Description
    When tab2 inherits tab1, explain in psql will always report a "Seq Scan" on tab2 even if there are appropriate indexes.  Through additional testing, it appears that the index is actually being used based on relative cost numbers, but that explain is just not reporting as such.
    
    Using 7.0.2.
    
    Sample Code
    DEV:menu# create table tab1 (col1 int4);
    CREATE
    DEV:menu# create table tab2 (col2 int4) inherits (tab1);
    CREATE
    DEV:menu# insert into tab2 (col1, col2) values (1,1);
    INSERT 28995 1
    DEV:menu# insert into tab2 (col1, col2) values (2,2);
    INSERT 28996 1
    DEV:menu# create index idx1 on tab2 (col2);
    CREATE
    DEV:menu# select * from tab2 where col2 = 2;
     col1 | col2
    ------+------
        2 |    2
    (1 row)
    
    DEV:menu# explain select * from tab2 where col2 = 2;
    NOTICE:  QUERY PLAN:
    
    Seq Scan on tab2  (cost=0.00..1.02 rows=1 width=8)
    
    EXPLAIN
    
    
    No file was uploaded with this report
    
    
    
  2. Re: Explain reports unexpected results with inheritance

    Tom Lane <tgl@sss.pgh.pa.us> — 2001-02-14T19:13:43Z

    pgsql-bugs@postgresql.org writes:
    > Explain reports unexpected results with inheritance
    
    I see no unexpected behavior here, nor anything that has anything to do
    with inheritance.  The CREATE INDEX updates (some of) the planner's
    statistics about the table, so that it now knows tab2 contains only one
    page and two rows.  Under those conditions it's never going to select
    an index scan --- seqscan will always look cheaper.  (A seqscan will
    only need one disk page fetch, indexscan must take at least two.)
    
    Load up more data, do a VACUUM, and try the EXPLAIN again.
    
    			regards, tom lane