Re: SELECT is faster on SQL Server

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Frank Millman <frank(at)chagford(dot)com>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: SELECT is faster on SQL Server
Date: 2021-03-19 14:38:14
Message-ID: 4059132.1616164694@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Frank Millman <frank(at)chagford(dot)com> writes:
> However, the bizarre thing is that I have simply restored the index to
> what it was in the first place. If you look at the table definition in
> my original message you can see that all the columns were included in
> the index. But the query did not use it as a covering index. Now the
> EXPLAIN ANALYSE clearly shows 'Index Only Scan using ar_tots_cover'. I
> have no idea what changed.

VACUUM, maybe? Even if there's a covering index, the planner is not
likely to prefer an index-only scan unless it thinks that most of the
table's pages are known all-visible. If they're not, most of the
rows will require heap probes anyway to check row visibility, meaning
that the "index-only" scan's performance degrades to about that of a
regular indexscan.

In this example, since you're fetching such a large fraction of the
table (which the planner is accurately estimating), there's not a lot
of daylight between the estimated costs of seqscan and index-only
scan to begin with. I'm not surprised that it'd prefer the former
if the table isn't recently vacuumed.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message asli cokay 2021-03-19 15:03:57 Re: WAL-G shipping to the cloud
Previous Message Frank Millman 2021-03-19 12:28:27 Re: SELECT is faster on SQL Server