2016-06-17 8 views
0

Dies ist ähnlich wie insert multiple rows into mysql through node.js, sondern geht es um Verfahren.Massenprozedur Call Node MySQL

Ich möchte eine Prozedur in großen Mengen aufrufen (über 10k Mal).

Tuning das alles in separaten Aufrufen in unglaublich langsam (bei etwa 20 Einfügungen pro Sekunde, wie das Verfahren Dinge einfügt).

Wie kann ich eine Prozedur mehrmals aufrufen, effizient mit einem einzigen Datenbankanruf?

Ich könnte nur eine Reihe von CALL procedure(args...); aufbauen und das anrufen, aber gibt es eine bessere, schnellere und effizientere Art und Weise?

+0

ich mit diesem am ehesten helfen kann. Sie müssten Details zu den Tabellen anzeigen, die von Schemas betroffen sein sollen, über 'show create table xyz' für jeden und den gespeicherten proc. Ich könnte Vergleiche in Zeiten deines Weges gegen einen schnellen Weg zeigen. Aber Sie müssen diese Frage verbessern, bevor ich anfangen würde. – Drew

Antwort

0

Sie können dies tun, indem Sie mehrere Anweisungen in einer einzigen Abfrage ausführen.

allererst Sie Ihre Verbindung mit mysql Modul mit den multipleStatements Option aktiviert schaffen sollte:

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

Dann müssen Sie jede Ihrer Prozedur verketten Anrufe zu einem einzigen String. Vergessen Sie nicht das Semikolon ;.

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 

Schließlich führen Sie einfach Ihre verkettete Zeichenfolge Abfrage die mehreren Anweisungen aktiviert Verbindung mit:

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