On Tue, Apr 14, 2020 at 5:12 PM Andy Fan <zhihui.fan1...@gmail.com> wrote:

>
>
> On Tue, Apr 14, 2020 at 4:58 PM Amit Langote <amitlangot...@gmail.com>
> wrote:
>
>> On Tue, Apr 14, 2020 at 5:29 PM Andy Fan <zhihui.fan1...@gmail.com>
>> wrote:
>> > On Tue, Apr 14, 2020 at 3:40 PM Amit Langote <amitlangot...@gmail.com>
>> wrote:
>> >> On Tue, Apr 14, 2020 at 4:13 PM Richard Guo <guofengli...@gmail.com>
>> wrote:
>> >> > On Tue, Apr 14, 2020 at 2:44 PM Amit Langote <
>> amitlangot...@gmail.com> wrote:
>> >> >> Maybe I am missing something obvious, but is it intentional that
>> >> >> enable_indexscan is checked by cost_index(), that is, *after*
>> creating
>> >> >> an index path?  I was expecting that if enable_indexscan is off,
>> then
>> >> >> no index paths would be generated to begin with, because I thought
>> >> >> they are optional.
>> >> >
>> >> > I think the cost estimate of index paths is the same as other paths
>> on
>> >> > that setting enable_xxx to off only adds a penalty factor
>> (disable_cost)
>> >> > to the path's cost. The path would be still generated and compete
>> with
>> >> > other paths in add_path().
>> >>
>> >> Yeah, but I am asking why build the path to begin with, as there will
>> >> always be seq scan path for base rels.
>> >
>> > I guess that is because user may disable seqscan as well.  If so, we
>> > still need formula to decide with one to use, which requires index path
>> > has to be calculated.  but since disabling the two at the same time is
>> rare,
>> > we can ignore the index path build  if user allow seqscan
>>
>> I am saying that instead of building index path with disabled cost,
>> just don't build it at all. A base rel will always have a sequetial
>> path, even though with disabled cost if enable_seqscan = off.
>>
>
> Let's say user set  enable_seqscan=off and set enable_indexscan=off;
> will you expect user to get seqscan at last?  If so, why is seqscan
> (rather than index scan) since both are disabled by user equally?
>
>
The following test should demonstrate what I think.

demo=# create table t(a int);
CREATE TABLE
demo=# insert into t select generate_series(1, 10000000);
INSERT 0 10000000
demo=# create index t_a on t(a);
CREATE INDEX
demo=# analyze t;
ANALYZE
demo=# set enable_seqscan to off;
SET
demo=# set enable_indexscan to off;
SET
demo=# set enable_bitmapscan to off;
SET
demo=# set enable_indexonlyscan to off;
SET
demo=# explain select * from t where a = 1;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 Index Scan using t_a on t  (cost=10000000000.43..10000000008.45 rows=1
width=4)
   Index Cond: (a = 1)
(2 rows)

If we just disable index path,  we will get seqscan at last.

Regards
Andy Fan


>> Amit Langote
>> EnterpriseDB: http://www.enterprisedb.com
>>
>

Reply via email to