-- L15 OFFSET deep page (scan-then-discard) — page 100 of 100, offset 1980
-- FeedKeysetIT.l15ExplainOffsetScansThenDiscardsKeysetSeeksAndNeedsIndex (seed 2000, keyset index present)
-- SELECT fi.id, fi.first_highlighted_at FROM feed_items fi
--   ORDER BY fi.first_highlighted_at DESC, fi.id DESC OFFSET 1980 LIMIT 20
-- 읽기 포인트: 정렬키 인덱스가 있어도 깊은 페이지에선 Seq Scan(2000)+Sort(2000) 로 전량을 훑고 20만 남긴다.
--            Limit 하위 actual rows=2000 = 결과 20행을 위해 훑은 행(over-scan = offset+20). buffers shared hit=141.

Limit  (cost=275.61..275.66 rows=20 width=24) (actual time=0.945..0.949 rows=20 loops=1)
  Buffers: shared hit=141
  ->  Sort  (cost=270.66..275.66 rows=2000 width=24) (actual time=0.759..0.865 rows=2000 loops=1)
        Sort Key: first_highlighted_at DESC, id DESC
        Sort Method: quicksort  Memory: 189kB
        Buffers: shared hit=141
        ->  Seq Scan on feed_items fi  (cost=0.00..161.00 rows=2000 width=24) (actual time=0.124..0.369 rows=2000 loops=1)
              Buffers: shared hit=141
Planning:
  Buffers: shared hit=5 read=1
Planning Time: 0.137 ms
Execution Time: 0.996 ms
