ในโลกของการพัฒนาเว็บแอปพลิเคชัน การจัดการข้อมูลจำนวนมากเป็นเรื่องปกติ ไม่ว่าจะเป็นรายการบทความสินค้า หรือข้อมูลผู้ใช้งาน การนำเสนอข้อมูลทั้งหมดในหน้าเดียวจึงเป็นไปไม่ได้และส่งผลเสียต่อประสิทธิภาพของระบบ การแบ่งหน้าข้อมูล (Pagination) จึงเป็นกลไกสำคัญที่ช่วยให้ผู้ใช้เข้าถึงข้อมูลได้ง่ายและรวดเร็ว
💡 ทำความเข้าใจ Static Pagination ใน PostgreSQL
Static Pagination หรือการแบ่งหน้าข้อมูลแบบคงที่ คือวิธีการที่ระบบจะคำนวณและดึงชุดข้อมูลที่กำหนดไว้ล่วงหน้า (Pre-rendered) สำหรับแต่ละหน้า โดยอาศัยการจำกัดจำนวนแถว (Limit) และการข้ามจำนวนแถว (Offset) ซึ่งเป็นแนวทางที่เหมาะอย่างยิ่งเมื่อข้อมูลไม่มีการเปลี่ยนแปลงบ่อยครั้ง และต้องการความเร็วในการโหลดสูงสุด
⚙️ หลักการทำงานด้วย PostgreSQL
ใน PostgreSQL เราสามารถใช้คำสั่ง `LIMIT` และ `OFFSET` เพื่อจำกัดผลลัพธ์ให้แสดงเฉพาะชุดข้อมูลที่เราต้องการ โดยสมมติว่าเรามีตารางชื่อ articles ที่เก็บข้อมูลบทความ ซึ่งมีคอลัมน์หลักคือ id และ title
การทำงานจะอาศัยหลักการดังนี้:
- LIMIT (L): กำหนดจำนวนแถวสูงสุดที่ต้องการดึงมาแสดงในหน้านั้นๆ (เช่น 10 รายการต่อหน้า)
- OFFSET (O): กำหนดจำนวนแถวที่ต้องการข้ามไปก่อนที่จะเริ่มดึงข้อมูล (เช่น ถ้าต้องการหน้า 2 และแต่ละหน้ามี 10 รายการ จะต้องข้ามไป 10 แถวแรก)
💻 ตัวอย่างโค้ด PostgreSQL สำหรับ Pagination
สมมติว่าเราต้องการดึงข้อมูลหน้า 2 โดยแต่ละหน้าแสดง 5 รายการ (Page 2, Limit 5):
SQL
SELECT id, title, created_at FROM articles ORDER BY id ASC LIMIT 5 OFFSET 5;
คำอธิบายโค้ด:
SELECT ... FROM articles: เลือกข้อมูลจากตารางarticlesORDER BY id ASC: การเรียงลำดับข้อมูลเป็นสิ่งสำคัญมากในการทำ Pagination เพื่อให้ผลลัพธ์มีความสม่ำเสมอLIMIT 5: จำกัดผลลัพธ์ให้เหลือเพียง 5 แถวOFFSET 5: ข้าม 5 แถวแรกไป เพื่อให้ได้ข้อมูลชุดที่ 2 (หน้า 2)
🚀 ข้อควรระวังและ Best Practices
แม้ว่า `LIMIT` และ `OFFSET` จะใช้งานง่าย แต่เมื่อข้อมูลมีขนาดใหญ่มาก (หลักล้านแถว) การใช้ `OFFSET` ที่ค่าสูงมากๆ อาจทำให้ประสิทธิภาพลดลงอย่างมาก เนื่องจากฐานข้อมูลต้องประมวลผลและข้ามแถวที่ไม่ได้ใช้ไปก่อนถึงจะถึงจุดที่ต้องการได้
ทางเลือกสำหรับประสิทธิภาพสูง: สำหรับระบบที่ต้องการความเร็วสูงสุด ควรพิจารณาใช้การแบ่งหน้าแบบ Cursor-based Pagination โดยใช้ Primary Key (เช่น id) หรือ Timestamp ในการระบุจุดเริ่มต้นแทนการใช้ OFFSET
✅ บทสรุป
Static Pagination ด้วย PostgreSQL โดยใช้ LIMIT และ OFFSET เป็นวิธีที่รวดเร็วและตรงไปตรงมาสำหรับการแบ่งหน้าข้อมูลในกรณีที่ข้อมูลไม่มีการเปลี่ยนแปลงบ่อยครั้ง อย่างไรก็ตาม ในการออกแบบระบบระดับ Senior Architect ควรตระหนักถึงข้อจำกัดด้านประสิทธิภาพเมื่อข้อมูลมีปริมาณมหาศาล และพิจารณาปรับใช้เทคนิค Cursor-based Pagination เมื่อจำเป็น เพื่อให้มั่นใจว่าแอปพลิเคชันของคุณมีประสิทธิภาพสูงสุดในทุกสเกล