Files
document-haness/docs/n+1liner/final/evidence/raw/explain/l16-precompute-plan.txt
T

19 lines
1.2 KiB
Plaintext
Executable File

-- L16 (c) precompute (CQRS read model) — per-viewer feed_visible table, single covering index scan
-- FeedVisibilityIT.l16ExplainThreeWayPlanCompare / l16PrecomputeIsSingleIndexScanNoOrNoSort (seed 2000)
-- CREATE TABLE feed_visible AS SELECT :me AS viewer_id, fi.id AS feed_item_id, fi.first_highlighted_at
-- FROM feed_items fi WHERE <visible to me>;
-- CREATE INDEX ix_feed_visible ON feed_visible (viewer_id, first_highlighted_at DESC, feed_item_id DESC);
-- SELECT feed_item_id AS id, first_highlighted_at FROM feed_visible
-- WHERE viewer_id=:me ORDER BY first_highlighted_at DESC, feed_item_id DESC LIMIT 20
-- 읽기 포인트: 단일 Index Only Scan(커버링) — OR 도 조인도 Sort 도 없다. buffers shared hit=1(+2 read),
-- 훑는 행 20. 단일 OR(122)·UNION(200) 대비 order-of-magnitude 적음 = CQRS 읽기 모델의 정체.
Limit (cost=0.28..1.84 rows=20 width=24) (actual time=0.021..0.025 rows=20 loops=1)
Buffers: shared hit=1 read=2
-> Index Only Scan using ix_feed_visible on feed_visible (cost=0.28..117.22 rows=1500 width=24) (actual time=0.021..0.023 rows=20 loops=1)
Index Cond: (viewer_id = :me)
Heap Fetches: 20
Buffers: shared hit=1 read=2
Planning Time: 0.102 ms
Execution Time: 0.034 ms