node.js mssql对于大查询来说太慢了

时间:2016-06-21 15:56:32

标签: sql-server node.js sql-server-2008 npm

我使用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秒)。

谢谢! ;)

0 个答案:

没有答案