Database Index: ทำไมระบบช้าลงเมื่อข้อมูลโต และแก้ได้อย่างไร

28 มิถุนายน 2569อ่าน 7 นาที
Database Index: ทำไมระบบช้าลงเมื่อข้อมูลโต และแก้ได้อย่างไร

ระบบที่เคยเร็วตอนข้อมูลน้อย เริ่มอืดเมื่อข้อมูลโตขึ้น สาเหตุยอดฮิตคือการค้นหาที่ไม่มี Index เข้าใจว่า Index ช่วยอย่างไร และทำไมใส่มากเกินก็เป็นปัญหา

อาการที่พบบ่อยคือ ระบบเร็วดีตอนเปิดใช้ใหม่ ๆ แต่พอข้อมูลสะสมเป็นแสนเป็นล้านรายการ การค้นหาหรือเปิดรายงานเริ่มอืด สาเหตุยอดฮิตคือฐานข้อมูลต้องไล่อ่านทุกแถวเพื่อหาข้อมูลที่ต้องการ เพราะไม่มี Index Index ก็เหมือนสารบัญของหนังสือ ที่ทำให้เปิดไปหน้าที่ต้องการได้ทันที แทนที่จะพลิกทีละหน้าตั้งแต่ต้น

Index ช่วยมาก แต่ไม่ฟรี

Index ทำให้การค้นหาเร็วขึ้นมหาศาล แต่ก็มีต้นทุน คือกินพื้นที่เก็บเพิ่ม และทำให้การเพิ่มหรือแก้ข้อมูลช้าลงเล็กน้อย เพราะต้องอัปเดต Index ด้วย การใส่ Index กับทุกคอลัมน์แบบไม่คิด จึงไม่ใช่ทางออก ควรใส่กับคอลัมน์ที่ใช้ค้นหาหรือเรียงบ่อย ๆ และวัดผลว่าช่วยจริง

  • ใส่ Index กับคอลัมน์ที่ใช้ในเงื่อนไขค้นหาและการเชื่อมตารางบ่อย
  • ตรวจ query ที่ช้าที่สุดก่อน เพราะมักให้ผลตอบแทนสูงสุด
  • อย่าใส่ Index เกินจำเป็น เพราะกระทบความเร็วการเขียนข้อมูล

ผู้บริหารไม่ต้องเขียน Index เอง แต่ควรรู้ว่าเมื่อระบบช้าลงเพราะข้อมูลโต มักไม่ใช่เพราะต้องซื้อของแพงขึ้นเสมอไป การถามทีมว่าได้ตรวจเรื่อง Index และ query ที่ช้าหรือยัง คือคำถามที่ช่วยประหยัดเงินและเวลาได้มาก

DatabaseIndexPerformanceScalability

บริการที่เกี่ยวข้อง

รับพัฒนาเว็บแอปพลิเคชัน

สร้างเว็บแอปที่รองรับการเติบโตและเชื่อมกับระบบอื่นได้

WhaleScope

ดูโครงสร้างตลาดของทุกหมวดธุรกิจไทย บน WhaleScope

รายชื่อบริษัท ผู้เล่นรายใหญ่ และอัตราคงอยู่ของแต่ละหมวด — จากข้อมูลจดทะเบียน 2 ล้านนิติบุคคล

อ่านต่อ

Read Replica: แยกงานอ่านออกจากงานเขียน เพื่อให้ระบบไหว

ระบบส่วนใหญ่อ่านข้อมูลบ่อยกว่าเขียนมาก เมื่อฐานข้อมูลเดียวรับทั้งสองไม่ไหว Read Replica คือการทำสำเนาไว้รับงานอ่าน ช่วยให้รายงานและหน้าเว็บเร็วขึ้นโดยไม่กระทบงานเขียน

Connection Pooling: จัดการการเชื่อมต่อฐานข้อมูลให้ไม่ล้น

ทุกการเชื่อมต่อฐานข้อมูลมีต้นทุน ถ้าเปิดใหม่ทุกคำขอ ระบบจะช้าและล้มเมื่อคนเยอะ Connection Pooling คือการใช้การเชื่อมต่อซ้ำจากสระกลาง ทำให้เร็วขึ้นและทนโหลดได้มากขึ้น

Database Sharding: แบ่งฐานข้อมูลเมื่อใหญ่เกินเครื่องเดียว

เมื่อข้อมูลใหญ่จนเครื่องเดียวรับไม่ไหว การเพิ่มเครื่องให้แรงขึ้นมีเพดาน Sharding คือการแบ่งข้อมูลออกไปหลายเครื่อง ช่วยให้ขยายต่อได้ แต่ก็เพิ่มความซับซ้อนที่ต้องแลก

N+1 Query: ปัญหายอดฮิตที่ทำให้ระบบช้าโดยไม่รู้ตัว

หน้าจอที่แสดงรายการ 100 รายการ อาจยิงคำขอไปฐานข้อมูลถึง 101 ครั้งโดยไม่จำเป็น นี่คือปัญหา N+1 Query ที่พบบ่อยมาก ฟังดูเล็กแต่ทำให้ระบบช้าลงหลายเท่า