Optimize คำสั่ง ใน MySQL เขียนเมื่อ 2009.07.17 โดย

การ Optimization คำสั่งต่างๆ ช่วยให้ application ทำงานได้เร็วขึ้นพร้อมทั้งยังใช้ทรัพยากรน้อยลงด้วย ต่อไปก็เป็น Tips เล็กๆ ในการ Optimize คำสั่งของ MySQL มาว่ากันเลยดีกว่า
  1. เลือกใช้ชนิดข้อมูลให้ถูกต้อง ปัญหาที่พบบ่อยๆ คือการใช้อยู่เพียง int และ varchar ทั้งๆ ที่ข้อมูลเหล่านั้นเหมาะกับชนิดอื่นๆ มากกว่า เช่น การเก็บข้อมูลที่เป็นวันที่ไปเก็บในชนิด varchar เมื่อเก็บข้อมูล '2009-07-17' ใน varchar ต้องใช้ขนาด 11 Bytes ในขณะที่เก็บในชนิด date ใช้เพียง 3 Bytes และอีกสิ่งหนึ่งคือคุณจะไม่สามารถใช้ฟังก์ชั่น ในการทำงานเกี่ยวกับข้อมูลนั้นๆ ได้

  2. เลือกใช้ชุดอักขระ (Charset) ให้เหมาะสม เนื่องจากการใช้งานชุดอัขระที่ไม่ถูกต้อง MySQL จะทำการ Convert ในขณะที่ทำงานให้เหมาะสมกับชุดอักขระที่ใช้งานอยู่

  3. Optimize การใช้งาน COUNT() เมื่อคุณใช้งาน COUNT() โดยไม่มีการใช้งาน GROUP BY หรือ WHERE จะไม่มีการอ่านข้อมูลทั้งตาราง แต่จะไปอ่านที่ข้อมูลสถิติของตารางแทน แต่เมื่อมีการใช้งานร่วมกับ GROUP BY หรือ WHERE จะมีการอ่านข้อมูลทั้งตาราง ดังนั้นถ้าตารางมีการสร้าง index ไว้อย่างเหมาะสมแล้ว MySQL จะไปอ่านข้อมูลจากข้อมูลสถิติของตารางแทนทำให้ทำงานได้เร็วขึ้น

  4. พยายามไม่ใช้ subquery ตัว query optimizer ของ MySQL นั้นไม่สามารถทำงานกับ subquery ได้ ดังนั้นถ้าเป็นไปได้ควรใช้การ JOIN ในรูปแบบต่างๆ แทนซึ่ง query optimizer สามารถทำงานได้ และควรทำการ index  column ที่ทำการ JOIN ด้วย

  5. ใช้ EXPLAIN เป็นตัวช่วย แม้ว่าคำสั่งของเราจะสามารถแสดงผล ตามที่เราต้องการได้อย่างถูกต้องและสามารถทำงานได้อย่างรวดเร็วแล้ว แต่ในการทำงานจริงอาจจะมีปริมาณข้อมูลที่มากขึ้น จะำให้คำสั่งนั้นไม่เหมาะกับการใช้งานได้ เนื่องจากมีการใช้งาน index ที่ไม่ถูกต้องหรือใช้การ JOIN อย่างไม่เหมาะสม คำสั่ง EXPLAIN สามารถช่วยอธิบายสิ่งเหล่านี้ได้ อธิบายได้ดังนี้

    • Table แน่นอนคือชื่อตาราง หรือชื่อเสมือนของตารางต่างๆ
    • Type เป็นชนิดของการ JOIN ซึ่งมีความสำคัญบ่องบอกได้ว่าเหมาะสมหรือยัง จะมีค่าต่างๆ เรียงจากดีไปหาแย่ system, const, eq_ref, ref, range, index, all
    • Possible Keys คือ key ที่ถูกใช้ในการ JOIN
    • Keys คือ key ที่ถูกใช้งาน
    • Key_len คือขนาดของ key ที่ถูกใช้งาน
    • ref คือ column หรือค่าคงที่ที่ถูกใช้ในการค้นหา
    • rows คือจำนวนระเบียนที่ถูกดึงออกมา
    • extra คือคำอธิบายอื่นๆ เมื่อเห็น "Using temporary" หรือ "Using filesort" ถือว่าคำสั่งนั้นๆ ยังใช้ไม่ได้
ทั้งหมดนี้เป็นเกร็ดเล็กน้อย เพื่อเพิ่มประสิทธิภาพของ application ของคุณได้



คำเตือนคำเตือน เนื้อหาต่างๆ ในบทความ รวมถึงรูปภาพทั้งหมดในบทความนี้ เป็นความเห็นส่วนตัวของผู้เขียนแต่ละคน ซึ่งแต่ละคนได้ทำการลงทะเบียน และเขียนบทความลงใน Modoeye Articles นี้โดยไม่มีค่าธรรมเนียมใดๆ บทความเหล่านี้เป้าหมายเพื่อการศึกษา และความบันเทิงเท่านั้น การนำส่วนหนึ่งส่วนใดของบทความไปใช้งาน ควรทำการอ้างอิงถึงผู้เขียนและแหล่งที่มาด้วย