看板 Database 關於我們 聯絡資訊
※ 引述《JoeHorn (每天都在公司玩OLG)》之銘言: : 一個 DB connection 可以執行很多次 SQL statements, : 你舉的這個例子只需要 transaction,但是.. 可以用同一個 connection。 : 更何況,很多程式語言有 connection pool 管理能力。 : (因為可以用同一個 connection,以下我就不回了.. 因為都不是考量因素) 這部份完全沒有解釋performance上的問題,用不用 connection pool 都 一樣。 一個 DB connection 的確是可以執行好幾個SQL,但要注意到的是每執行 一個SQL就是一次從client到server的 round trip。重複使用同一個 DB connection 或是用 connetion pool 只能省下 login, authetication, 和一些 initialization 的時間,但是執行每一個 SQL,還是需要從 client/ application 把 sql statement 或是 binding variable 的值傳到 server/db (當已有curosr時)。此外,執行完後 server/db 還要把結果傳 回去。這不只是傳輸時間而已,處理每一個 SQL 時,database要花時間在 解析sql statement、處理cursor、binding variable、重新取得lock上面, 非常沒有效率。 用個簡單的例子,現在有10個SQL要執行,就叫做 SQL 1 到 SQL 10 好了, SQL 10 要依據 SQL 9 的結果,SQL 9 要依據SQL 8 的結果,以此類推。用 stored procedure 只要一個 round trip,不用的話就要10次,這在效能上 有很大的差別,而且如果其中有幾個SQL要傳回大量的資料,不用 stored procedure 的效能會是最糟糕。 把 logic 放在 stored procedure 或是 application 各有利弊,但在 performance 上,使用 stored procedure 有很大的優勢。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.142.74.199
kkkke:SP效能佳,移植困難不能怪SP。但依賴SP將無法分散運算量。 07/03 16:36
kkkke:如果運算量不是系統瓶頸,我想SP能用就用。 07/03 16:48
FireLake:若運用得當,不把不相關的東西塞到同個SP,運算量不是問題 07/03 17:17
kkkke:我不知道怎分哪些不相關。我把TABLE之間的運算通通都寫SP。 07/03 18:18