Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

Index คืออะไร?

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

Index คืออะไร? ทำไมต้องมี Index ใน MySQL?

ในบทเรียนก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับการใช้ Subquery ใน `SELECT` Clause เพื่อดึงข้อมูลที่เกี่ยวข้องกับแต่ละแถวในตารางหลัก บทเรียนนี้จะพาคุณไปรู้จักกับอีกหนึ่งเครื่องมือสำคัญในการเพิ่มประสิทธิภาพการทำงานของฐานข้อมูล นั่นคือ Index

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

Index คืออะไร?

Index คือโครงสร้างข้อมูลพิเศษที่สร้างขึ้นเพื่อช่วยให้ MySQL ค้นหาข้อมูลในตารางได้รวดเร็วยิ่งขึ้น โดยไม่ต้องสแกนทุกแถวในตาราง (Full Table Scan) การสร้าง Index จะช่วยลดเวลาในการค้นหาข้อมูลได้อย่างมาก โดยเฉพาะอย่างยิ่งเมื่อตารางมีขนาดใหญ่

พูดง่ายๆ คือ Index เป็นเหมือน "ทางลัด" ที่ช่วยให้ MySQL เข้าถึงข้อมูลที่ต้องการได้โดยตรง แทนที่จะต้อง "เดิน" ไปตามถนนทุกสายในเมือง (ตาราง) เพื่อหาบ้านเลขที่ที่ต้องการ

ทำไมต้องใช้ Index?

เหตุผลหลักในการใช้ Index คือ การเพิ่มประสิทธิภาพในการ Query เมื่อคุณสั่งให้ MySQL ค้นหาข้อมูลด้วยคำสั่ง `SELECT` MySQL จะใช้ Index (ถ้ามี) เพื่อค้นหาข้อมูลที่ตรงกับเงื่อนไขใน `WHERE` Clause ได้อย่างรวดเร็ว ทำให้ Query ทำงานได้เร็วขึ้นอย่างเห็นได้ชัด

ลองพิจารณาตัวอย่างต่อไปนี้:

SELECT * FROM customers WHERE last_name = 'Smith';

ถ้าตาราง `customers` ไม่มี Index บน column `last_name` MySQL จะต้องสแกนทุกแถวในตารางเพื่อหาลูกค้าที่มีนามสกุล 'Smith' แต่ถ้าเราสร้าง Index บน column `last_name` MySQL จะใช้ Index เพื่อค้นหาแถวที่ต้องการได้โดยตรง ทำให้ Query ทำงานได้เร็วกว่ามาก

Trade-offs: ข้อดีและข้อเสียของการใช้ Index

แม้ว่า Index จะมีประโยชน์อย่างมากในการเพิ่มประสิทธิภาพการ Query แต่ก็มีข้อควรพิจารณาบางประการ:

  • ใช้เนื้อที่เพิ่มขึ้น: Index ต้องใช้เนื้อที่ในการจัดเก็บข้อมูลเพิ่มเติม ดังนั้น การสร้าง Index จำนวนมากเกินไป อาจทำให้ฐานข้อมูลมีขนาดใหญ่ขึ้น
  • กระทบต่อการเขียนข้อมูล: เมื่อมีการเพิ่ม, แก้ไข หรือลบข้อมูลในตาราง MySQL จะต้องอัปเดต Index ที่เกี่ยวข้องด้วย ซึ่งอาจทำให้การเขียนข้อมูลช้าลงเล็กน้อย

ดังนั้น การตัดสินใจว่าจะสร้าง Index บน column ใดบ้าง จึงต้องพิจารณาถึง Trade-offs ระหว่างความเร็วในการอ่านข้อมูล (SELECT) และความเร็วในการเขียนข้อมูล (INSERT, UPDATE, DELETE)

แนวปฏิบัติที่ดีในการสร้าง Index

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

  • สร้าง Index บน Column ที่ใช้บ่อยใน WHERE Clause: Column ที่มักถูกใช้ใน `WHERE` Clause เพื่อกรองข้อมูล เป็นเป้าหมายที่ดีในการสร้าง Index
  • หลีกเลี่ยงการสร้าง Index บน Column ที่มีการแก้ไขบ่อย: การสร้าง Index บน Column ที่มีการแก้ไขบ่อย อาจทำให้การเขียนข้อมูลช้าลง
  • พิจารณา Cardinality ของ Column: Cardinality หมายถึงจำนวนค่าที่ไม่ซ้ำกันใน Column Column ที่มี Cardinality สูง (เช่น `id`) เหมาะสมกับการสร้าง Index มากกว่า Column ที่มี Cardinality ต่ำ (เช่น `gender` ซึ่งมีค่าเพียงไม่กี่ค่า)
  • ใช้ Composite Index เมื่อจำเป็น: Composite Index คือ Index ที่สร้างขึ้นจากหลาย Column เหมาะสำหรับ Query ที่ใช้หลาย Column ใน `WHERE` Clause
  • ตรวจสอบและปรับปรุง Index อย่างสม่ำเสมอ: เมื่อมีการใช้งานฐานข้อมูลไปสักระยะหนึ่ง อาจจำเป็นต้องตรวจสอบและปรับปรุง Index เพื่อให้มั่นใจว่ายังคงมีประสิทธิภาพอยู่

ตัวอย่าง: การสร้าง Index

สมมติว่าเรามีตาราง `products` ที่มี column `product_name`, `category_id`, และ `price` และเรามักจะ Query หาผลิตภัณฑ์ตาม `category_id` บ่อยๆ เราสามารถสร้าง Index บน column `category_id` ได้ดังนี้:

CREATE INDEX idx_category_id ON products (category_id);

คำสั่งนี้จะสร้าง Index ชื่อ `idx_category_id` บน column `category_id` ของตาราง `products`

ในบทเรียนถัดไป เราจะเรียนรู้เกี่ยวกับการสร้างและลบ Index อย่างละเอียด รวมถึงประเภทของ Index ที่มีให้เลือกใช้ใน MySQL

สรุป

Index เป็นเครื่องมือที่มีประสิทธิภาพในการเพิ่มความเร็วในการ Query ข้อมูลใน MySQL แต่การใช้งาน Index อย่างมีประสิทธิภาพต้องอาศัยความเข้าใจใน Trade-offs และแนวปฏิบัติที่ดี การเลือกสร้าง Index บน Column ที่เหมาะสม จะช่วยให้ฐานข้อมูลของคุณทำงานได้รวดเร็วและมีประสิทธิภาพมากยิ่งขึ้น

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service