คือตอนนี้ผมเขียนโปรแกรมในลักษณะแบบเก็บค่าจากฐานข้อมูลก่อน ค่อยประมวลผลที่ตัวโปรแกรม
แต่ทราบว่างานบางอย่างสามารถประมวลผลที่ฐานข้อมูลได้เลย เช่น join, avg, etc...
ในฐานะที่พวกพี่ๆ มีความชำนาญในการเขียนโปรแกรม
อยากทราบว่าการกระทำการบนฐานข้อมูลแล้วได้ข้อมูลที่ประมวลแล้ว กับการดึงข้อมูลดิบมาประมวลผลเอง
แบบไหนจะมีประสิทธิภาพในแง่ของความเร็ว ขีดจำกัด หรือแง่อื่นๆ มากกว่ากันครับ
ขอบคุณครับ
ที่ต้องควรระวังคือเรื่อง database round trips นะครับ
อะไรที่มันดึงมาได้ในคราวเดียวก็ทำให้ได้ใน query เดียวจะดีกว่า ยกเว้นแต่ plan ไว้ว่าจะทำ lazy load
ส่วนจะเอาไปคำนวณที่ไหนเนี่ยก็แล้วแต่การออกแบบครับ บางโปเจ็คออกแบบเน้นทำ store procedure ก็ยัดๆลงไปใน query นั่นแหละ (แต่ query ความยาวเป็นพันบรรทัดนี่เป็นอะไรที่เจ็บปวดมากเวลาต้องมานั่งแก้)
ส่วนตัวผมก็จะดูก่อนว่าถ้าคำนวณไม่ซับซ้อนมากก็ใส่ใน query ครับ
แต่ถ้าซับซ้อนมากเขียนเป็น query ลำบากก็เขียนในโค๊ด
ตอบแบบภาพรวมคร่าวๆ
ทำใน sql มักจะช้ากว่าเอามาคิดเองครับ
แต่สุดท้ายก็ต้องดูอยู่ดีว่าทำคำสั่งอะไร แล้วฝั่งโปรแกรมใช้ภาษาอะไร
ผมว่า SQL เร็วกว่านะครับ มันผ่านการ optimize มาอย่างยิ่งยวดแล้ว
ไม่นับว่าต้องดึงข้อมูลดิบมาส่งผ่านเน็ตเวิร์คแล้วต้องมาประมวลผลอีก
มันขึ้นอยู่เป็นกรณีไปนั่นแหละครับ ต้องลองเองถึงจะรู้ว่าเคสไหนดีไม่ดี
ถ้าดึงมาประมวลผลเพื่อแสดงข้อมูล และสูตรซับซ้อน ดึงมาประมวลที่ client ดีกว่าครับ
แต่ถ้าดึงมาประมวลแล้ว update กลับไปที่ Database ใช้ store procedure
ถ้าแสดงผลข้อมูลจาก procedure ได้เลย เวลาแก้ไขมันก็ทำได้ง่ายเพราะแก้ที่ sql ได้โดยตรง
แต่ถ้าแก้ไขการแสดงผลจากโปรแกรมมันต้อง rebuild ใหม่
ลองนึกถึงตอน debug ตอน MA สิครับ เขียนไว้ใน SQL นี่วางกับดักตัวเองชัดๆ
อย่างที่หลายท่านแนะนำมาครับ
นอกจากนี้อาจต้องดูปัจจัยอื่นๆ เช่น tuning indexs ความถี่ของการใช้งาน ขนาดข้อมูลที่ต้องประมลวผล
ถ้าทำด้วย SQL แล้วประสิทธิภาพยังใช้ได้ (อย่าให้เกิน 0.01 วินาที) ก็ลุย SQL ตรงๆ ครับ มันมีเรื่อง caching อีกด้วย ที่จะลดการคำนวณที่ไม่จำเป็นลงได้อีก