ทำไมเราต้องทำ Index ใน MySQL

Oct. 1, 2024 · boychawin

วันนี้ได้มีโอกาสมีจับเจ้าฐานข้อมูลตอนนี้ มีขนาดใหญ่ เลยถือโอกาสทำ Index เลย เพราะเริ่ม Query ช้าแล้ว ดังนั้นเราจะพูดถึงขั้นตอนการสร้าง Index ใน MySQL พร้อมทั้งอธิบายการพิจารณาการเลือกฟิลด์เพื่อทำ Index รวมถึงข้อดีและข้อเสียในการใช้งาน Index ครับ

ขั้นตอนการทำ Index

  1. การวิเคราะห์ Query

เริ่มต้นด้วยการวิเคราะห์ Query ที่ต้องการใช้ดึงข้อมูล ซึ่งในที่นี้มี Query ที่ใช้สำหรับดึงข้อมูลจากหลายตาราง ดังนี้


    SELECT * 
    FROM user, provinces, service_center, tb_name_status, u_group 
    WHERE user.user_prov = provinces.code 
    AND user.user_center = service_center.center_id 
    AND user.user_level = tb_name_status.name_en 
    AND user.user_group = u_group.group_id
    LIMIT 2498;

  1. การเลือกฟิลด์สำหรับทำ Index

    การเลือกฟิลด์ที่เหมาะสมสำหรับการทำ Index เป็นสิ่งสำคัญ โดยทั่วไป ควรเลือกฟิลด์ที่

    • ถูกใช้ในการ Join ตาราง เช่น user.user_prov, user.user_center, user.user_level, และ user.user_group
    • คอลัมน์ที่มีการใช้ใน WHERE clause หรือในเงื่อนไขการกรองข้อมูล

    ในตัวอย่างนี้ เราได้เลือกทำ Index ในฟิลด์ต่อไปนี้


    -- สร้าง Index สำหรับตาราง user
    CREATE INDEX idx_user_prov ON user(user_prov);
    CREATE INDEX idx_user_center ON user(user_center);
    CREATE INDEX idx_user_level ON user(user_level);
    CREATE INDEX idx_user_group ON user(user_group);

    -- สร้าง Index สำหรับตาราง provinces
    CREATE INDEX idx_provinces_code ON provinces(code);

    -- สร้าง Index สำหรับตาราง service_center
    CREATE INDEX idx_service_center_center_id ON service_center(center_id);

    -- สร้าง Index สำหรับตาราง tb_name_status
    CREATE INDEX idx_tb_name_status_name_en ON tb_name_status(name_en);

    -- สร้าง Index สำหรับตาราง u_group
    CREATE INDEX idx_u_group_group_id ON u_group(group_id);
    
  1. การทดสอบประสิทธิภาพ

หลังจากที่สร้าง Index เสร็จแล้ว ให้ทดสอบ Query อีกครั้งเพื่อเปรียบเทียบเวลาในการประมวลผลก่อนและหลังการสร้าง Index

ผลลัพธ์จากการ Query

Before: 0.0309 วินาที
After: 0.0177 วินาที

การลดเวลาในการประมวลผลจาก 0.0309 วินาที เป็น 0.0177 วินาที แสดงให้เห็นว่า Index ช่วยเพิ่มประสิทธิภาพการค้นหาได้จริง นี่เป็นตัวเลขคราวๆเท่านั้นนะครับ

ข้อดี

  • Index จะช่วยให้ระบบสามารถค้นหาข้อมูลได้เร็วขึ้น โดยเฉพาะในกรณีที่มีข้อมูลจำนวนมาก
  • ทำให้ใช้ CPU น้อยลงในระยะยาว

ข้อเสีย

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

สรุป

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