mysql - Node MySQL 以最快的速度执行多个查询

标签 mysql node.js node-mysql async.js

最快的方法是获取到MYSQL的查询,然后返回输出:

console.log('queries finished', results)"

还有更好的方法吗?请解释你的答案!

谢谢!

方法一:

var connection = mysql.createConnection({multipleStatements: true});

connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
  if (err) throw err;

  console.log('queries done', results);
});

方法二:

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); 
        }                    

    );

});   

方法三:

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);
    });
});

方法四:

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);
}); 

我没有发布它,但是方法 3 和 4 也可以在没有连接池的情况下完成。还有关于使用 npm 模块异步的 promise ,什么是最快的,为什么!?谢谢。

最佳答案

在我的应用程序中使用 3 个真实查询的上述四个选项中,每个查询都需要大约 1-3 秒的时间来执行,对于任何感兴趣的人来说,方法 3 最终是最快的。

方法 1 和方法 2 慢了整整 1/2 秒,而方法 4 只是稍微慢了一点点。

编辑:我通过使用上面评论中的 console.time('query') 建议完成了这些基准测试。

关于mysql - Node MySQL 以最快的速度执行多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513128/

相关文章:

php - 如何通过 laravel 迁移将日期间隔存储到 MySQL 中?

javascript - Twilio SMS 消息不断重新发送相同的消息

android - WebRTC 使用 Peerjs 和原生 Android/iOS 客户端

javascript - NodeJS - 本地范围已关闭( fatal error )

javascript - 如何将标签映射到标签同义词?

javascript - 为什么我尝试将 SQL 查询中的行获取到脚本中的全局变量中却只得到一个空数组?

php - 自从从 mysql 更新到 mysqli 以来数据库查询被破坏

mysql -/var/lib/memsql中没有memsql.sock文件

javascript - 代码 : "PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR" in nodeJs MySQL

Mysql 选择所有与字符串中的数字匹配的内容