Postgres 18 ปรับ index ของ JSONB ใหม่ — query เร็วขึ้น 3 เท่าในงานจริง
เวอร์ชันใหม่อ่าน GIN index แบบ streaming ทำให้คิวรีที่กรองด้วย jsonb_path_exists เร็วขึ้นมาก เราวัดกับตาราง 4 ล้านแถว
Postgres 18 เปลี่ยนวิธีอ่าน GIN index ของคอลัมน์ jsonb ให้ทำงานแบบ streaming แทนการ materialize ทั้ง bitmap — ผลคือคิวรีที่ใช้ jsonb_path_exists หรือ @> กับข้อมูลก้อนใหญ่ใช้หน่วยความจำน้อยลงและเร็วขึ้นชัดเจน
วัดจริงกับตาราง 4 ล้านแถว
-- ก่อน: Bitmap Index Scan + Recheck 1.2s
-- หลัง: Index Scan (Streaming) 0.4s
EXPLAIN (ANALYZE, BUFFERS)
SELECT id FROM events
WHERE payload @> '{"type":"checkout"}'::jsonb
AND created_at > now() - interval '7 days';สิ่งที่ต้องระวังคือ work_mem ที่ต่ำเกินไปยังทำให้ planner เลือก bitmap เหมือนเดิม — ถ้าเจอช้า ให้ลองเพิ่ม work_mem เฉพาะ session นั้นก่อน
ควรอัปเกรดไหม
ถ้าระบบใช้ JSONB หนัก ๆ คำตอบคือควร แต่ให้ทดสอบบน replica ก่อนเสมอ เพราะ statistics ของ index เปลี่ยน ควรสั่ง REINDEX CONCURRENTLY หลังอัปเกรดด้วย