2016-06-17 85 views
0

這與insert multiple rows into mysql through node.js類似,但是關於程序。批量程序調用節點MySQL

我想要批量調用一個過程(超過10K次)。

在單獨的調用中以極低的速度執行此操作(每秒插入大約20個插入內容,因爲過程插入了內​​容)。

如何多次調用一個過程,高效地使用單個數據庫調用?

我可以建立一串CALL procedure(args...);然後調用它,但是有沒有更好,更快捷和更高效的方法?

+0

我可以用這個最有可能的幫助。您需要通過'show create table xyz'爲每個和存儲的proc顯示受模式影響的表的詳細信息。我可以在你的方式比較快速的方式比較。但是在我開始之前,你需要改進這個問題。 – Drew

回答

0

您可以通過在單個查詢中執行多個語句來完成此操作。

首先你應該使用mysql模塊與multipleStatements啓用選項創建連接的:

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'me', 
    password : 'secret', 
    database : 'my_db', 
    multipleStatements: true 
}); 

然後你需要連接每個程序的調用轉換爲一個字符串。不要忘記分號;

var procCalls = "CALL procedure(arg1a, arg1b);" + 
    "CALL procedure(arg2a, arg2b);" + 
    "CALL procedure(arg3a, arg3b);" + 
    "CALL procedure(arg4a, arg4b);" + 
    "CALL procedure(arg5a, arg5b);" + 
    "CALL procedure(arg6a, arg6b);" + 
    "CALL procedure(arg7a, arg7b);"; 
// You might want to do it in a loop 

最後,只是用多語句啓用連接執行你的連接字符串查詢:

connection.query(procCalls , function (error, results, fields) { 
    if (error) throw error; 
    // Success! 
});