diff --git a/doc/src/sgml/perform.sgml b/doc/src/sgml/perform.sgml
index 4f3b4e76078..df684a2051a 100644
--- a/doc/src/sgml/perform.sgml
+++ b/doc/src/sgml/perform.sgml
@@ -1108,8 +1108,9 @@ EXPLAIN (ANALYZE, IO, BUFFERS OFF) SELECT * FROM tbl WHERE id &lt; 100000 AND id
     <literal>I/O</literal> line is shown only when the prefetching performed at
     least one read I/O operation.  A scan that never started any read-ahead in
     the first place shows neither line; an index scan does not begin
-    prefetching until it has moved between several distinct table blocks, so
-    a scan whose rows all come from one or two table blocks never does.
+    prefetching until it has switched from one table block to another several
+    times, so a scan that fetches only a few rows, or whose rows all come from
+    the same table block, never does.
    </para>
 
    <para>
diff --git a/src/backend/access/heap/heapam_indexscan.c b/src/backend/access/heap/heapam_indexscan.c
index 3489a749740..ba87122dad9 100644
--- a/src/backend/access/heap/heapam_indexscan.c
+++ b/src/backend/access/heap/heapam_indexscan.c
@@ -687,8 +687,10 @@ heapam_index_heap_fetch(IndexScanDesc scan, IndexScanHeapData *hscan,
 		hscan->xs_blkswitch_count++;
 
 		/*
-		 * Once enough distinct blocks are fetched, start prefetching (though
-		 * only if we haven't already).
+		 * Once the scan has switched heap blocks enough times, start
+		 * prefetching (though only if we haven't already).  Note that this
+		 * counts switches, not distinct blocks: a scan that alternates
+		 * between two heap blocks gets there too.
 		 *
 		 * The counter can overflow.  This is harmless because we only need it
 		 * for this and for xs_visited_pages_limit accounting.
