想請問一下,
如果用NODE.JS,使用連接資料庫連線池撈資料,以下哪個效能較佳?
1.NODE.JS 呼叫MYSQL 30次 (30次SELECT)
2.NODE.JS 呼叫MYSQL 預存程序:甲 1次 ,甲再去呼叫預存程序乙30次,
甲蒐集完資料後,再統一回傳給NODE.JS
我的想法是2應該比較省效能,因為作法1等於要跟資料庫重新連線30次,
作法2則是只要連線1次。
但我看網路上有說法是
說法一:
MYSQL每呼叫一次預存程序,等於是開一個查詢視窗,也就是一個新的DB CONNECTION,所以呼叫30次預存程序,等於連線DB30次
說法二:
NODE.JS的資料庫連線池已經預存好資料庫連線了,等於一直保持連接,呼叫幾次無所謂
一般比較效能的對照組如下:
1.SQL statement vs Stored Procedure - Store Procedure 快
2.未使用 Connection Pool vs 使用 Connection Pool - 使用 Connection Pool 快
綜合以上兩點原則
答案是第2種方式效能比較好
原因是「Stored Procedure」
而非兩種方式都有使用的「Connection Pool」
你好,感謝回答,
那想再請問:
假設預存程序的內容是concat出select字串,再執行。
這樣其實也是Store Procedure組成SQL statement 。
也就是
1.select statement
2.call SP =>concat出select statement=>執行select statement
這樣依然是2比較快嗎?
Stored Procedure 是快在「PreCompiled SQL Statement」
其中 SQL Statement 是固定的,只有參數是變動的
如果用寫程式串 SQL 的方式來使用 Stored Procedure
那其實沒什麼好研究的
如果你真的想知道答案
就自己灌個幾百萬筆資料來比較看看就知道了