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
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 |