การ Optimization คำสั่งต่างๆ ช่วยให้ application ทำงานได้เร็วขึ้นพร้อมทั้งยังใช้ทรัพยากรน้อยลงด้วย ต่อไปก็เป็น Tips เล็กๆ ในการ Optimize คำสั่งของ MySQL มาว่ากันเลยดีกว่า
- เลือกใช้ชนิดข้อมูลให้ถูกต้อง ปัญหาที่พบบ่อยๆ คือการใช้อยู่เพียง int และ varchar ทั้งๆ ที่ข้อมูลเหล่านั้นเหมาะกับชนิดอื่นๆ มากกว่า เช่น การเก็บข้อมูลที่เป็นวันที่ไปเก็บในชนิด varchar เมื่อเก็บข้อมูล '2009-07-17' ใน varchar ต้องใช้ขนาด 11 Bytes ในขณะที่เก็บในชนิด date ใช้เพียง 3 Bytes และอีกสิ่งหนึ่งคือคุณจะไม่สามารถใช้ฟังก์ชั่น ในการทำงานเกี่ยวกับข้อมูลนั้นๆ ได้
- เลือกใช้ชุดอักขระ (Charset) ให้เหมาะสม เนื่องจากการใช้งานชุดอัขระที่ไม่ถูกต้อง MySQL จะทำการ Convert ในขณะที่ทำงานให้เหมาะสมกับชุดอักขระที่ใช้งานอยู่
- Optimize การใช้งาน COUNT() เมื่อคุณใช้งาน COUNT() โดยไม่มีการใช้งาน GROUP BY หรือ WHERE จะไม่มีการอ่านข้อมูลทั้งตาราง แต่จะไปอ่านที่ข้อมูลสถิติของตารางแทน แต่เมื่อมีการใช้งานร่วมกับ GROUP BY หรือ WHERE จะมีการอ่านข้อมูลทั้งตาราง ดังนั้นถ้าตารางมีการสร้าง index ไว้อย่างเหมาะสมแล้ว MySQL จะไปอ่านข้อมูลจากข้อมูลสถิติของตารางแทนทำให้ทำงานได้เร็วขึ้น
- พยายามไม่ใช้ subquery ตัว query optimizer ของ MySQL นั้นไม่สามารถทำงานกับ subquery ได้ ดังนั้นถ้าเป็นไปได้ควรใช้การ JOIN ในรูปแบบต่างๆ แทนซึ่ง query optimizer สามารถทำงานได้ และควรทำการ index column ที่ทำการ JOIN ด้วย
- ใช้ 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 ของคุณได้