Re: strange explain - Mailing list pgsql-hackers

From Tom Lane
Subject Re: strange explain
Date
Msg-id 29086.1021298690@sss.pgh.pa.us
Whole thread Raw
In response to strange explain  (Oleg Bartunov <oleg@sai.msu.su>)
Responses Re: strange explain  (Oleg Bartunov <oleg@sai.msu.su>)
Re: strange explain  (Oleg Bartunov <oleg@sai.msu.su>)
List pgsql-hackers
Oleg Bartunov <oleg@sai.msu.su> writes:
> tour=# explain analyze  select * from tours  where
>              ( operator_id in (2,3,4,5,7) and type_id = 2 )  or
>              ( operator_id = 8 and type_id=4 );

> Index Scan using type_idx, type_idx, type_idx, type_idx, type_idx, type_idx on tours  (cost=0.00..12.25 rows=1
width=1091)(actual time=0.26..0.26 rows=0 loops=1)
 

> What does many 'type_idx' means ?

Multiple indexscans.

It looks to me like your WHERE clause is being flattened into
            ( operator_id = 2 and type_id=2 ) or            ( operator_id = 3 and type_id=2 ) or            (
operator_id= 4 and type_id=2 ) or            ( operator_id = 5 and type_id=2 ) or            ( operator_id = 7 and
type_id=2) or            ( operator_id = 8 and type_id=4 )
 

and then it has a choice of repeated indexscans on operator_id or
type_id.  Depending on the selectivity stats it might pick either.
You might find that a 2-column index on both would be a win.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Jason Tishler
Date:
Subject: Re: Native Win32, How about this?
Next
From: "Rod Taylor"
Date:
Subject: Re: Join of small table with large table