Tags:

คือตอนนี้ผมเขียนโปรแกรมในลักษณะแบบเก็บค่าจากฐานข้อมูลก่อน ค่อยประมวลผลที่ตัวโปรแกรม
แต่ทราบว่างานบางอย่างสามารถประมวลผลที่ฐานข้อมูลได้เลย เช่น join, avg, etc...
ในฐานะที่พวกพี่ๆ มีความชำนาญในการเขียนโปรแกรม
อยากทราบว่าการกระทำการบนฐานข้อมูลแล้วได้ข้อมูลที่ประมวลแล้ว กับการดึงข้อมูลดิบมาประมวลผลเอง
แบบไหนจะมีประสิทธิภาพในแง่ของความเร็ว ขีดจำกัด หรือแง่อื่นๆ มากกว่ากันครับ
ขอบคุณครับ

Get latest news from Blognone
By: soginal
AndroidIn Love
on 16 May 2013 - 14:09 #573929
soginal's picture

ที่ต้องควรระวังคือเรื่อง database round trips นะครับ
อะไรที่มันดึงมาได้ในคราวเดียวก็ทำให้ได้ใน query เดียวจะดีกว่า ยกเว้นแต่ plan ไว้ว่าจะทำ lazy load

ส่วนจะเอาไปคำนวณที่ไหนเนี่ยก็แล้วแต่การออกแบบครับ บางโปเจ็คออกแบบเน้นทำ store procedure ก็ยัดๆลงไปใน query นั่นแหละ (แต่ query ความยาวเป็นพันบรรทัดนี่เป็นอะไรที่เจ็บปวดมากเวลาต้องมานั่งแก้)

ส่วนตัวผมก็จะดูก่อนว่าถ้าคำนวณไม่ซับซ้อนมากก็ใส่ใน query ครับ
แต่ถ้าซับซ้อนมากเขียนเป็น query ลำบากก็เขียนในโค๊ด

By: lancaster
ContributorUbuntuWindows
on 16 May 2013 - 14:29 #573942

ตอบแบบภาพรวมคร่าวๆ

ทำใน sql มักจะช้ากว่าเอามาคิดเองครับ

แต่สุดท้ายก็ต้องดูอยู่ดีว่าทำคำสั่งอะไร แล้วฝั่งโปรแกรมใช้ภาษาอะไร

By: anu
Contributor
on 17 May 2013 - 02:42 #574267 Reply to:573942

ผมว่า SQL เร็วกว่านะครับ มันผ่านการ optimize มาอย่างยิ่งยวดแล้ว
ไม่นับว่าต้องดึงข้อมูลดิบมาส่งผ่านเน็ตเวิร์คแล้วต้องมาประมวลผลอีก

By: lancaster
ContributorUbuntuWindows
on 17 May 2013 - 02:55 #574272 Reply to:574267

มันขึ้นอยู่เป็นกรณีไปนั่นแหละครับ ต้องลองเองถึงจะรู้ว่าเคสไหนดีไม่ดี

By: wichate
Android
on 16 May 2013 - 16:27 #573983

ถ้าดึงมาประมวลผลเพื่อแสดงข้อมูล และสูตรซับซ้อน ดึงมาประมวลที่ client ดีกว่าครับ
แต่ถ้าดึงมาประมวลแล้ว update กลับไปที่ Database ใช้ store procedure

By: massacre
AndroidUbuntu
on 17 May 2013 - 13:49 #574390

ถ้าแสดงผลข้อมูลจาก procedure ได้เลย เวลาแก้ไขมันก็ทำได้ง่ายเพราะแก้ที่ sql ได้โดยตรง
แต่ถ้าแก้ไขการแสดงผลจากโปรแกรมมันต้อง rebuild ใหม่

By: kowito
Android
on 20 May 2013 - 01:28 #575204

ลองนึกถึงตอน debug ตอน MA สิครับ เขียนไว้ใน SQL นี่วางกับดักตัวเองชัดๆ

By: gogogokrit on 1 June 2013 - 21:58 #581027

อย่างที่หลายท่านแนะนำมาครับ

นอกจากนี้อาจต้องดูปัจจัยอื่นๆ เช่น tuning indexs ความถี่ของการใช้งาน ขนาดข้อมูลที่ต้องประมลวผล
ถ้าทำด้วย SQL แล้วประสิทธิภาพยังใช้ได้ (อย่าให้เกิน 0.01 วินาที) ก็ลุย SQL ตรงๆ ครับ มันมีเรื่อง caching อีกด้วย ที่จะลดการคำนวณที่ไม่จำเป็นลงได้อีก