-- L16 union branches — each visibility branch rides its own optimal plan (what single-OR can't)
-- FeedVisibilityIT.l16LowSelectivityBranchesRideTheirIndex (seed 2000, viewer user008)
-- 읽기 포인트: 저선택도 분기는 자기 인덱스를 탄다 — mentioned=ix_mentions_user 조인, private=ix_feed_items_private
--            partial 의 Index Only Scan. public(60% 고선택도)은 Bitmap Heap Scan+top-N Sort 가 최적.
--            단일 OR 은 3분기를 하나의 bitmap 으로 묶어 분기별 최적 플랜을 못 가진다.

== mentioned branch (JOIN feed_item_mentions on ix_mentions_user) ==
Limit -> Sort (top-N) -> Hash Join (fi.id = m.feed_item_id)
  ->  Bitmap Heap Scan on feed_items fi (visibility='MENTIONED')
  ->  Hash -> Bitmap Heap Scan on feed_item_mentions m
        ->  Bitmap Index Scan on ix_mentions_user (Index Cond: mentioned_user_id = :me)   rows=200

== private branch (partial index ix_feed_items_private WHERE visibility='PRIVATE') ==
Limit -> Incremental Sort (Presorted Key: first_highlighted_at)
  ->  Index Only Scan using ix_feed_items_private on feed_items fi (Index Cond: user_id = :me)  Heap Fetches: 21

== public branch (60% selectivity -> seq/bitmap + top-N is optimal, not an index range) ==
Limit -> Sort (top-N heapsort)
  ->  Bitmap Heap Scan on feed_items fi (Recheck Cond: visibility='PUBLIC')
        ->  Bitmap Index Scan on ix_feed_items_visibility_sort (Index Cond: visibility='PUBLIC')
