Nodo MySQL ejecuta múltiples consultas lo más rápido posible.

Cuál es el método más rápido, lleva la consulta a MYSQL y luego regresa a la salida:

console.log (‘consultas terminadas’, resultados) ”

¿Hay un método aún mejor? Por favor explique su respuesta!

¡Gracias!

Método 1:

var connection = mysql.createConnection({multipleStatements: true}); connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) { if (err) throw err; console.log('queries done', results); }); 

Método 2:

 const Db = mysql.createPool({ connectionLimit: 7, dateStrings: true, multipleStatements: true }); Db.getConnection(function(err, connection) { if(err) console.log(err); connection.query(` SELECT "1" AS "first"; SELECT "2" AS "second";`, function(err, results) { connection.release(); if(err) console.log(err); console.log('queries done', results); } ); }); 

Método 3:

 const Db = mysql.createPool({ connectionLimit: 7, dateStrings: true, multipleStatements: true }); Db.getConnection(function(err, connection) { async.parallel([ function(callback) { connection.query(` SELECT "1" AS "first"`, function(err, done) { callback(err, done); } ); }, function(callback) { connection.query(` SELECT "2" AS "second"`, function(err, done) { callback(err, done); } ); } ], function(err, results) { connection.release(); if(err) console.log(err); console.log('queries finished', results); }); }); 

Método 4:

 const Db = mysql.createPool({ connectionLimit: 7, dateStrings: true, multipleStatements: true }); async.parallel([ function(callback) { Db.getConnection(function(err, connection) { connection.query(` SELECT "1" AS "first"`, function(err, done) { connection.release(); callback(err, done); } ); }); }, function(callback) { Db.getConnection(function(err, connection) { connection.query(` SELECT "2" AS "second"`, function(err, done) { connection.release(); callback(err, done); } ); }); } ], function(err, results) { if(err) console.log(err); console.log('queries finished', results); }); 

Y no lo publiqué, pero los métodos 3 y 4 también se podrían hacer sin un conjunto de conexiones. También hay promesas sobre el uso del módulo npm async, ¿cuál es el más rápido y por qué? Gracias.

Los métodos 1 y 2 son similares, excepto que el grupo crea una conexión si se utilizan todas las conexiones en el grupo.

Para determinar cuál es más rápido, necesita conocer la potencia de cálculo frente al ancho de banda de la red entre su servidor de aplicaciones y su servidor de base de datos.

Este es el por qué:

En los métodos 1 y 2, está utilizando una sola conexión para ejecutar varias consultas. Si la capacidad de procesamiento de la máquina de la base de datos es más rápida que el ancho de banda de la red para enviar / recibir múltiples consultas, el método 1 y 2 es más eficiente. Si la potencia de procesamiento de la máquina de la base de datos es más lenta que el ancho de banda (por ejemplo, el servidor mysql de la aplicación reside en la misma máquina), entonces los métodos 3 y 4 serán teóricamente más rápidos.

Otro factor es si las afirmaciones dependen unas de otras. Debido a que los pasos 1 y 2 esencialmente ejecutan las declaraciones de forma síncrona, todo el conjunto de operaciones es una operación atómica / consistente. Para los métodos 3 y 4, debido a que se ejecutan de forma asíncrona aunque se activan en paralelo, puede haber casos en los que una statement posterior se complete antes que una instrucción anterior. Si eso sucede y hay dependencia, los métodos 3 y 4 dañarán sus datos.

TL; DR

  • Rápido + Sincrónico (insertar / actualizar, luego seleccionar resultados) = Método 1, 2 (Use la agrupación para reducir la necesidad de abrir nuevas conexiones)
  • Rápido + Asíncrono (inserciones en masa) = Método 3, 4
  • Conexión lenta entre la aplicación / servidor de base de datos = Método 1,2

De las cuatro opciones anteriores que usan 3 consultas reales en mi aplicación, cada una demora aproximadamente de 1 a 3 segundos en ejecutarse, el método 3 terminó siendo el más rápido para cualquier persona interesada.

Los métodos 1 y 2 fueron aproximadamente 1/2 segundo más lento, y el método 4 fue solo un poco más lento.

Edición: Hice estos puntos de referencia usando la sugerencia console.time('query') en los comentarios anteriores.