use*_*120 5 mysql node.js node-mysql async.js
哪个是最快的方法将查询获取到 MYSQL,然后返回到输出:
console.log('查询完成', 结果)"
有没有更好的方法?请解释你的答案!
谢谢!
方法一:
var connection = mysql.createConnection({multipleStatements: true});
connection.query('SELECT ?; SELECT ?', [1, 2], function(err, results) {
if (err) throw err;
console.log('queries done', results);
});
Run Code Online (Sandbox Code Playgroud)
方法二:
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);
}
);
});
Run Code Online (Sandbox Code Playgroud)
方法三:
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);
});
});
Run Code Online (Sandbox Code Playgroud)
方法四:
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);
});
Run Code Online (Sandbox Code Playgroud)
而且我没有发布它,但是方法3和4也可以在没有连接池的情况下完成。还有承诺使用 npm 模块异步,什么是最快的,为什么!?谢谢。
小智 2
Method 1 and 2 are similar except that Pool creates a connection if all connections in the pool are used.
To determine which is faster, you need to know the computing power vs network bandwidth between your application server and your database server.
Here's why:
In method 1 and 2, you are using a single connection to execute multiple queries. If the processing power of the database machine is faster than then network bandwidth to send/receive multiple queries, then method 1 and 2 is more efficient. If the processing power of the database machine is slower than the bandwidth(e.g. both application / mysql server resides on the same machine), then method 3 and 4 will theoretically be faster.
另一个因素是这些陈述是否相互依赖。因为步骤 1 和 2 本质上是同步运行语句,所以整个操作集是原子/一致操作。对于方法 3 和 4,虽然它们是并行触发的,但它们是异步运行的,因此可能会出现后面的语句比前面的语句更早完成的情况。如果发生这种情况并且存在依赖性,方法 3 和 4 将损坏您的数据。
长话短说