เห็นใน 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 หรือไม่
ถ้าไม่ น่าจะต้องปรับปรุงและเปลี่ยนแปลงกันแล้ว