PlusMagi's Blog By Pitt Phunsanit Backend,Database Astro: Pagination (การแบ่งหน้าข้อมูลบทความหรือสินค้าแบบ Static)

Astro: Pagination (การแบ่งหน้าข้อมูลบทความหรือสินค้าแบบ Static)

ในโลกของการพัฒนาเว็บแอปพลิเคชัน การจัดการข้อมูลจำนวนมากเป็นเรื่องปกติ ไม่ว่าจะเป็นรายการบทความสินค้า หรือข้อมูลผู้ใช้งาน การนำเสนอข้อมูลทั้งหมดในหน้าเดียวจึงเป็นไปไม่ได้และส่งผลเสียต่อประสิทธิภาพของระบบ การแบ่งหน้าข้อมูล (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;

คำอธิบายโค้ด:

  1. SELECT ... FROM articles: เลือกข้อมูลจากตาราง articles
  2. ORDER BY id ASC: การเรียงลำดับข้อมูลเป็นสิ่งสำคัญมากในการทำ Pagination เพื่อให้ผลลัพธ์มีความสม่ำเสมอ
  3. LIMIT 5: จำกัดผลลัพธ์ให้เหลือเพียง 5 แถว
  4. 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 เมื่อจำเป็น เพื่อให้มั่นใจว่าแอปพลิเคชันของคุณมีประสิทธิภาพสูงสุดในทุกสเกล

Exit mobile version