Re: why sequential scan is used on indexed column ??? - Mailing list pgsql-general

From Julius Tuskenis
Subject Re: why sequential scan is used on indexed column ???
Date
Msg-id 4854F236.1020009@gmail.com
Whole thread Raw
In response to Re: why sequential scan is used on indexed column ???  (Michael Fuhr <mike@fuhr.org>)
List pgsql-general
Hi Michael.

Thank you for your answer. I've checked - enable_nestloop is true. I did
ANALYZE, but that didn't help. The sequential scan is still used.... Any
more ideas why?

Julius Tuskenis



Michael Fuhr rašė:
> On Sat, Jun 14, 2008 at 04:59:44PM +0200, Andreas Kretschmer wrote:
>
>> Julius Tuskenis <julius.tuskenis@gmail.com> schrieb:
>>
>>> I have a question concerning performance. One of my queries take a long
>>> to execute. I tried to do "explain analyse" and I see that the
>>> sequential scan is being used, although I have indexes set on columns
>>> that are used in joins. The question is - WHY, and how to change that
>>> behavior???
>>>
>> Try to create an index on apsilankymai.sas_id
>>
>
> In the DDL that Julius posted apsilankymai doesn't have an sas_id
> column.
>
> The join is on apsilankymai.aps_saskaita = b_saskaita.sas_id.  Both
> columns have an index: b_saskaita.sas_id is a primary key so it
> should have an index implicitly, and apsilankymai.aps_saskaita has
> an explicit CREATE INDEX statement.  The WHERE clause is on
> b_saskaita.sas_subjektas, which also has an explicit CREATE INDEX
> statement.  Unless I'm mistaken all relevant columns have an index.
>
> A few of the row count estimates differ from reality:
>
>
>> Hash Join  (cost=5.17..10185.89 rows=6047 width=138) (actual time=10698.539..10698.539 rows=0 loops=1)
>>
>
>
>> Bitmap Heap Scan on b_saskaita  (cost=2.03..5.14 rows=9 width=96) (actual time=31.473..31.489 rows=1 loops=1)
>>
>
> However, that might not be entirely responsible for the questionable
> plan.  I created a test case that has close to the same estimated and
> actual row counts and has the same plan if I disable enable_nestloop:
>
> set enable_nestloop to off;
>
> explain analyze
> select *
> FROM b_saskaita JOIN apsilankymai ON (aps_saskaita = sas_id)
> where sas_subjektas = 20190;
>
>                                                               QUERY PLAN
                
>
--------------------------------------------------------------------------------------------------------------------------------------
>  Hash Join  (cost=6.54..5814.42 rows=5406 width=286) (actual time=3222.429..3222.429 rows=0 loops=1)
>    Hash Cond: (apsilankymai.aps_saskaita = b_saskaita.sas_id)
>    ->  Seq Scan on apsilankymai  (cost=0.00..4627.50 rows=300350 width=42) (actual time=0.085..1514.863 rows=300350
loops=1)
>    ->  Hash  (cost=6.43..6.43 rows=9 width=244) (actual time=0.122..0.122 rows=1 loops=1)
>          ->  Bitmap Heap Scan on b_saskaita  (cost=2.32..6.43 rows=9 width=244) (actual time=0.089..0.095 rows=1
loops=1)
>                Recheck Cond: (sas_subjektas = 20190)
>                ->  Bitmap Index Scan on fki_sas_subjektas  (cost=0.00..2.32 rows=9 width=0) (actual time=0.066..0.066
rows=1loops=1) 
>                      Index Cond: (sas_subjektas = 20190)
>  Total runtime: 3222.786 ms
>
> I get a better plan if I enable nested loops:
>
> set enable_nestloop to on;
>
> explain analyze
> select *
> FROM b_saskaita JOIN apsilankymai ON (aps_saskaita = sas_id)
> where sas_subjektas = 20190;
>
>                                                             QUERY PLAN
             
>
-----------------------------------------------------------------------------------------------------------------------------------
>  Nested Loop  (cost=79.93..4660.23 rows=5406 width=286) (actual time=1.000..1.000 rows=0 loops=1)
>    ->  Seq Scan on b_saskaita  (cost=0.00..10.25 rows=9 width=244) (actual time=0.116..0.870 rows=1 loops=1)
>          Filter: (sas_subjektas = 20190)
>    ->  Bitmap Heap Scan on apsilankymai  (cost=79.93..441.58 rows=6007 width=42) (actual time=0.084..0.084 rows=0
loops=1)
>          Recheck Cond: (apsilankymai.aps_saskaita = b_saskaita.sas_id)
>          ->  Bitmap Index Scan on idx_aps_saskaita  (cost=0.00..78.43 rows=6007 width=0) (actual time=0.068..0.068
rows=0loops=1) 
>                Index Cond: (apsilankymai.aps_saskaita = b_saskaita.sas_id)
>  Total runtime: 1.321 ms
>
> Julius, do you perchance have enable_nestloop = off?  If so, do you
> get a better plan if you enable it?  Also, have you run ANALYZE
> lately?
>
>

pgsql-general by date:

Previous
From: 加入简历库,让好工作找到你
Date:
Subject: 加入简历库,让好工作找到你
Next
From: Thomas Kellerer
Date:
Subject: Re: Need Tool to sync databases with 8.3.1