╔════════════════════════════════════════════════════════════════════════════════╗
║        JSONB Generation Performance Comparison (Higher is Better)              ║
╠════════════════════════════════════════════════════════════════════════════════╣
║                                                                                ║
║  PAGINATED QUERIES (100 rows, LIMIT/OFFSET) - 90% of GraphQL workload        ║
║                                                                                ║
║  jsonb_build_object  ████████████████████████ 22.2 TPS  ✅ WINNER            ║
║  to_jsonb            ██████████████░░░░░░░░░░ 14.6 TPS  (-34%)               ║
║  row_to_json         ████████████░░░░░░░░░░░░ 11.7 TPS  (-47%)               ║
║                                                                                ║
╠════════════════════════════════════════════════════════════════════════════════╣
║                                                                                ║
║  FILTERED QUERIES (WHERE clause, ~100 rows)                                   ║
║                                                                                ║
║  jsonb_build_object  ████████████████████████ 474.9 TPS  ✅ WINNER           ║
║  row_to_json         ███████████████████████▓ 473.0 TPS  (-0.4%)             ║
║  to_jsonb            █████████████████████░░░ 430.9 TPS  (-9%)                ║
║                                                                                ║
╠════════════════════════════════════════════════════════════════════════════════╣
║                                                                                ║
║  FULL TABLE SCAN (10,000 rows) - Rare in GraphQL                             ║
║                                                                                ║
║  to_jsonb            ████████████████████████  8.2 TPS  ✅ WINNER (+24%)     ║
║  jsonb_build_object  ███████████████████░░░░░  6.6 TPS                        ║
║  row_to_json         ███████████████░░░░░░░░░  5.0 TPS  (-25%)                ║
║                                                                                ║
╠════════════════════════════════════════════════════════════════════════════════╣
║                                                                                ║
║  LATENCY COMPARISON (Paginated Query - Lower is Better)                       ║
║                                                                                ║
║  jsonb_build_object   446 ms  ████████████░░░░░░░░░░  ✅ FASTEST             ║
║  to_jsonb             680 ms  ██████████████████▓░░░                          ║
║  row_to_json          852 ms  ████████████████████████                        ║
║                                                                                ║
╠════════════════════════════════════════════════════════════════════════════════╣
║  KEY FINDINGS:                                                                 ║
║                                                                                ║
║  ✅ jsonb_build_object is FASTEST for paginated/filtered queries              ║
║  ✅ to_jsonb only wins for full table scans (rare in GraphQL)                 ║
║  ✅ Current FraiseQL implementation is already optimal                         ║
║  ❌ row_to_json with LATERAL has significant join overhead                     ║
║                                                                                ║
║  RECOMMENDATION: Keep your current jsonb_build_object() approach               ║
╚════════════════════════════════════════════════════════════════════════════════╝

WEIGHTED SCORE (based on real-world GraphQL workload distribution):
  90% paginated queries + 9% filtered queries + 1% full scans

  jsonb_build_object:  100.0 points  ✅ OPTIMAL
  row_to_json:          52.9 points  ❌ Avoid
  to_jsonb:             66.2 points  ⚠️  Only for full scans
