ว่าด้วยเรื่อง View vs. Materialized Views ต่างกันอย่างไร?

หลายคนอาจจะได้ยินคำว่า Materialized View กัน แล้วอาจจะนึกว่ามันคือ View ปกติหรือเปล่า อันนี้ต้องบอกว่าไม่ใช่ครับ มันมีความต่างกัน

ต่างกันอย่างไร?

View เหมือนเป็น Virtual Table ที่ไม่มีเก็บ Physical Data ไว้เลย ดังนั้นเวลาที่เราเรียก View เมื่อไหร่ เราก็จะไปดึงข้อมูลทุกครั้ง

ส่วน Materialized View นี่ เราอาจจะมองว่ามันคือลูกผสมระหว่าง View กับ Table ก็ได้นะ คือมันจะคล้าย ๆ กับ View แต่ต่างตรงที่ว่า Materialized View จะเก็บ Result ที่ได้มาไว้ใน Table จริง ๆ (Physical Data) จนกว่าจะมีการ Refresh ดังนั้นเวลาที่เราใช้ Materialized View เราก็จะต้องคิดเรื่องการ Refresh ด้วย

Use Case ในงานใช้งานล่ะ?

  • View ใช้ตอนที่เราไม่ค่อยได้ Access ข้อมูล แต่ว่าข้อมูลในตารางมีการอัพเดทอยู่บ่อยครั้ง
  • ส่วน Materialized View ใช้ตอนที่เรา Access ข้อมูลบ่อย ๆ แต่ว่าข้อมูลใน Table ไม่ค่อยได้ถูกอัพเดท

ส่วนใหญ่เราจะใช้ Materialized View เหมือนเป็น Cache ของข้อมูลที่เรา Join มาแล้ว หรือเอามาประมวลผลแล้วนั่นเอง ซึ่งก็จะทำให้เราดึงข้อมูลได้รวดเร็วขึ้น

เราต้องมาคอย Refresh ข้อมูล?

ถ้าเอาจริง ๆ ก็ใช่ อย่างไรก็ดี Data Warehouse หรือ Database ส่วนใหญ่จะมีกระบวนการนี้โดยอัตโนมัติกันอยู่แล้ว

ใครที่กำลังมองหาวิธีเพิ่มความเร็วในการดึงข้อมูลอยู่ การใช้ Materialized View ก็เป็นตัวเลือกที่น่าสนใจอยู่นะครับ :wink:

1 Like

ปัจจุบันหลาย ๆ data warehouse หรือ database สามารถที่จะทำ near real-time refresh ข้อมูลใน materialized view ได้แล้ว

เพิ่งรู้ว่าสำหรับ Postgres ยังต้องทำ schedule refresh แบบ manual อยู่ แต่ถ้าอยากได้แบบ real-time incremental updates จริง ๆ ก็ลง extension pg_ivm เพิ่มได้