Teodor Sigaev <teo...@sigaev.ru> writes:
>          if (indexonly)
>              pages_fetched = ceil(pages_fetched * (1.0 - 
> baserel->allvisfrac));

> As I understand the code, index_pages_fetched() returns summary of page's 
> read 
> for index and heap together.

No.  Costs for touching the index were computed by the amcostestimate
function; this code is solely about estimating costs for touching the
heap.

> But on next line this recalculates with "all 
> visible fraction" of heap. After recent vacuum it could be 1.0 and then 
> pages_fetches will be zero. It seems to me obviously wrong, because it's for 
> index only scan it could be true only for heap, not for index pages.

Seems correct to me: if it's an index-only scan, and all pages are
all-visible, then indeed no heap pages will be fetched.

(Note that the cost model doesn't charge anything for touching the
visibility map.  This might be too simplistic, but certainly that cost
should be much smaller than touching the heap, since the map is small
enough that it should stay resident in shared buffers.)

                        regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to