ปัญหาที่พบเจอ
วันนี้มานั่ง review code และ metric การใช้งาน
ของระบบ API ที่เชื่อมต่อกับ MySQL database
พบว่ามี API ตัวหนึ่งมี response time ที่สูงขึ้นมาก
จะเจอมากขึ้นเมื่อมีผู้ใช้งานมากขึ้น
ซึ่งเป็นปัญหาที่พบเจอได้บ่อยมาก ๆ
ก็เลยไป review code และดู SQL query กันหน่อย

สิ่งที่พบเจอคือ
ใน logic การทำงาน ต้องการตรวจสอบว่า
ข้อมูลผู้ใช้งานเป็นไปตามเงื่อนไขที่กำหนดหรือไม่ ?
โดยทำการเขียน SQL ด้วย SELECT id FROM USERS WHERE conditions;

ปัญหาแรกที่เจอคือ มี index แต่ไม่มีประสิทธิภาพ
เลยแก้ไขไปก่อน ก็ดีขึ้น เรื่องนี้พลาดบ่อยมาก ๆ

ปัญหาต่อมาคือ สิ่งที่ select ออกมานั้น ไม่ได้ใช้งาน
เพียงแค่ตรวจสอบว่า มีข้อมูลหรือไม่เท่านั้นเอง
ดังนั้นจึงลองเปลี่ยนไปใช้งาน 2 แบบคือ

  • SELECT count(1)
  • SELECT with EXISTS

ผลที่ได้การ query ใช้เวลา fetch time ดังนี้

  • SELECT id = 0.000010 – 0.000020 วินาที
  • SELECT count และ exists ใช้เวลาพอ ๆ กัน = 0.0000060 – 0.0000080 วินาที

พอเห็นตัวเลขการทำงานแบบนี้แล้ว
ทำให้ง่ายมาก ๆ ต่อการตัดสินใจต่อการแก้ไข ว่าจะทำอย่างไร !!
ค่อย ๆ ปรับปรุงกันต่อไป

ผลจากการแก้ไข โลกสงบสุขขึ้นเยอะ