Select count() vs Select single column
ปัญหาที่พบเจอ วันนี้มานั่ง review code และ metric การใช้งานของระบบ API ที่เชื่อมต่อกับ MySQL database พบว่ามี API ตัวหนึ่งมี response time ที่สูงขึ้นมาก จะเจอมากขึ้นเมื่อมีผู้ใช้งานมากขึ้น ซึ่งเป็นปัญหาที่พบเจอได้บ่อยมาก ๆ ก็เลยไป review code และดู SQL query กันหน่อย
สิ่งที่พบเจอคือใน logic การทำงาน ต้องการตรวจสอบว่า ข้อมูลผู้ใช้งานเป็นไปตามเงื่อนไขที่กำหนดหรือไม่ ? โดยทำการเขียน SQL ด้วย SELECT id FROM USERS WHERE conditions;
ปัญหาแรกที่เจอคือ มี index แต่ไม่มีประสิทธิภาพ เลยแก้ไขไปก่อน ก็ดีขึ้น เรื่องนี้พลาดบ่อยมาก ๆ ปัญหาต่อมาคือ สิ่งที่ select ออกมานั้น ไม่ได้ใช้งาน เพียงแค่ตรวจสอบว่า มีข้อมูลหรือไม่เท่านั้นเอง ดังนั้นจึงลองเปลี่ยนไปใช้งาน 2 แบบคือ
ผลที่ได้การ query ใช้เวลา fetch time ดังนี้
พอเห็นตัวเลขการทำงานแบบนี้แล้ว
ทำให้ง่ายมาก ๆ ต่อการตัดสินใจต่อการแก้ไข ว่าจะทำอย่างไร !! ค่อย ๆ ปรับปรุงกันต่อไป
ผลจากการแก้ไข โลกสงบสุขขึ้นเยอะ