我使用mssql包用于node.js(v4.4.5 for windows)。 我有一个返回1.000.000行的查询,它非常慢......超过30秒。 我尝试过:
sql.connect(sqlConfig).then(function() {
new sql.Request().query('select * from myTable').then(function(recordset) {
//console.dir(recordset);
console.log('done');
}).catch(function(err) {
// ... query error checks
console.log('query error: '+err);
});
}).catch(function(err) {
// ... connect error checks
console.log('connection error: '+err);
});
还尝试使用存储过程,并尝试使用流式传输:
var i = 0;
sql.connect(sqlConfig, function(err) {
var request = new sql.Request();
request.stream = true;
request.input('id', sql.Int,myId);
request.execute('myStoredProcedure');
request.on('recordset', function(columns) {
// Emitted once for each recordset in a query
//console.log('RECORDSET:');
//console.log(columns);
});
request.on('row', function(row) {
// Emitted for each row in a recordset
if(i%100000==0)console.log('ROWS:'+i);
++i;
//console.log(row);
});
request.on('error', function(err) {
// May be emitted multiple times
console.log('ERROR:');
console.log(err);
});
request.on('done', function(affected) {
// Always emitted as the last one
console.log('DONE:');
console.log(affected);
});
});
sql.on('error', function(err) {
// ... error handler
console.log(err);
});
但是没有办法让这个工作(足够快)。
我做错了什么?或者还有另一种方法可以做到这一点或更好的包装?
P.S。我使用与php和mssql驱动程序相同的程序,它工作正常(+ - 5秒)。
谢谢! ;)