On Thu, Jun 8, 2023 at 9:10 PM Tomas Vondra <tomas.von...@enterprisedb.com> wrote:
> We already do prefetching for bitmap index scans, where the bitmap heap > scan prefetches future pages based on effective_io_concurrency. I'm not > sure why exactly was prefetching implemented only for bitmap scans, but > I suspect the reasoning was that it only helps when there's many > matching tuples, and that's what bitmap index scans are for. So it was > not worth the implementation effort. One of the reasons IMHO is that in the bitmap scan before starting the heap fetch TIDs are already sorted in heap block order. So it is quite obvious that once we prefetch a heap block most of the subsequent TIDs will fall on that block i.e. each prefetch will satisfy many immediate requests. OTOH, in the index scan the I/O request is very random so we might have to prefetch many blocks even for satisfying the request for TIDs falling on one index page. I agree with prefetching with an index scan will definitely help in reducing the random I/O, but this is my guess that thinking of prefetching with a Bitmap scan appears more natural and that would have been one of the reasons for implementing this only for a bitmap scan. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com