-- Crown Task 4 — deep-page keyset on the precompute parent path (index-range seek, ~19 rows)
-- FeedCrownIT.crownDeepPageKeysetSeeksFewerRowsWithPrecomputeThanSingleOr (seed 2000, user008, deepest page)
-- 읽기 포인트 (★ 실측 정정): 깊은 커서에선 사전계산 경로도 작은 Sort 가 붙는다 — Bitmap Index Scan on
--   ix_feed_visible 이 남은 19행만 인덱스 range(Index Cond 에 ROW(...) < ROW(cursor))로 훑고, Bitmap 은
--   정렬 출력을 안 하므로 19행을 quicksort(26kB). 핵심: 훑는 행수 19, 부모 buffers 3 — 페이지 근방만 만진다
--   (OFFSET 의 scan-then-discard 도, 단일 OR 의 전체 가시성 재해소도 아니다).

Nested Loop  (cost=22.44..299.62 rows=60 width=686) (actual time=0.023..0.059 rows=19 loops=1)
  Buffers: shared hit=60
  ->  Limit  (cost=22.17..22.22 rows=20 width=24) (actual time=0.013..0.015 rows=19 loops=1)
        Buffers: shared hit=3
        ->  Sort  (cost=22.17..22.22 rows=21 width=24) (actual time=0.013..0.014 rows=19 loops=1)
              Sort Key: feed_visible.first_highlighted_at DESC, feed_visible.feed_item_id DESC
              Sort Method: quicksort  Memory: 26kB
              Buffers: shared hit=3
              ->  Bitmap Heap Scan on feed_visible  (cost=4.49..21.71 rows=21 width=24) (actual time=0.005..0.006 rows=19 loops=1)
                    Recheck Cond: ((viewer_id = 'e6a2f6da-c975-41ef-9b48-a4a6c1a72cc0'::uuid) AND (ROW(first_highlighted_at, feed_item_id) < ROW('2026-04-17 21:00:00+00'::timestamp with time zone, '759efcc1-efd0-4a24-94d6-7e83001fabb1'::uuid)))
                    Heap Blocks: exact=1
                    Buffers: shared hit=3
                    ->  Bitmap Index Scan on ix_feed_visible  (cost=0.00..4.49 rows=21 width=0) (actual time=0.003..0.003 rows=19 loops=1)
                          Index Cond: ((viewer_id = 'e6a2f6da-c975-41ef-9b48-a4a6c1a72cc0'::uuid) AND (ROW(first_highlighted_at, feed_item_id) < ROW('2026-04-17 21:00:00+00'::timestamp with time zone, '759efcc1-efd0-4a24-94d6-7e83001fabb1'::uuid)))
                          Buffers: shared hit=2
  ->  Limit  (cost=0.28..13.83 rows=3 width=670) (actual time=0.002..0.002 rows=1 loops=19)
        Buffers: shared hit=57
        ->  Index Scan using ix_highlights_feed_items_created on highlights h  (cost=0.28..36.42 rows=8 width=670) (actual time=0.002..0.002 rows=1 loops=19)
              Index Cond: (feed_item_id = feed_visible.feed_item_id)
              Buffers: shared hit=57
Planning Time: 0.075 ms
Execution Time: 0.118 ms
