เห็นใน feed มีการ share เรื่อง SQL Query Optimization! กันเยอะ
ซึ่งอธิบายการปรับปรุงประสิทธิภาพการทำงานของ SQL กัน
ยกตัวอย่างเช่น
- LIKE vs REGEXP_LIKE
- REGEXP_EXTRACT
- ใช้ temp table แทน IN สำหรับข้อมูลเยอะ ๆ
พอดูแล้วก็คิดว่า มันแปลก ๆ ไหมนะ
แต่สงสัยผมไม่ค่อยใช้คำสั่ง SQL เยอะเท่าไรเลยไม่ค่อยรู้มั้ง
แต่ที่ผมใช้งานจริง ๆ มักจะเป็นดังนี้
- พวกการ LIKE ต่าง ๆ มักจะไม่ใช้เลย ไปใช้ database model สำหรับการ search ดีกว่าเยอะ แต่ถ้าข้อมูลไม่เยอะ คนใช้งานไม่เยอะ ก็ใช้ ๆ ไปก็ได้มั้ง !! แต่อย่าลืมทำ performacne test ดูด้วยละ หรือ explain ดูด้วยว่าใช้ cost ไปเท่าไร มันสำคัญมาก ๆ
- อีกอย่าง %X% แบบนี้ลด ละ เลิก ใช้ X% แบบนี้ยังพอทน !
- ลดการ join ลง โดยใช้การทำ pre-joined หรือเตรียมข้อมูลให้ง่ายต่อการ query ตั้งแต่การจัดเก็บดีกว่า ลด cost ได้เยอะ แถม performance ดีกว่ามาก ๆ (ลูกอีกชั่ง join ลดให้เยอะ ๆ ครับ มันเปลือง)
- เน้น design for write และ design for read จะมีความยากในการออกแบบพอสมควร แต่ได้ผลดี ลดงาน ลดเวลาไปเยอะ
- ถ้าต้องมี parameter หรือ ข้อมุลใน IN เยอะ ๆ ตรงนี้ ถ้าไม่เยอะ และ fixed size ถึงจะใช้ IN แต่ถ้าเยอะ และ ไม่รูปขนาดที่ชัดเจน แนะนำให้ใช้ EXISTS ดีกว่า
- พวก index ก็ใส่ให้ถูก และ มีประสิทธิภาพด้วย ไม่งั้น เดี๋ยวจะเจอปัญหา คือ ขนาดของ index ใหญ่กว่า data ที่เก็บกันอีก !!
- โลกนี้ไม่ใช่มีแต่ RDBMS นะครับ
ไม่มีผิดมีถูก ต้องดูตามระบบที่ใช้งานด้วย
ว่า performance ตรงตาม business requirement หรือไม่
ถ้าไม่ น่าจะต้องปรับปรุงและเปลี่ยนแปลงกันแล้ว