1

我想更新超过 100k 的数据,但我无法更新它。我正在使用 Sequalize 和 mysql。我首先从 .txt 文件中读取数据,然后根据表中已有的数据更新表数据。我正在使用 Sequalize,但更新 10 万条记录需要 1 个多小时。有什么方法可以使用 Sequalize 更新批量数据?

这是我的示例代码:

async.each(arrayData, function(_arrayData, _callback) {
        var connection = index.connection;
   let query = 'UPDATE debit_tran_reg SET response_status ='+'"'+_arrayData.response_status+'"'+',response_rejection_reason='+'"'+_arrayData.response_rejection_reason+'"'+',umrn_no='+'"'+_arrayData.umrn_no+'"'+'WHERE loan_no ='+'"'+_arrayData.loan_no+'"'+'';
          connection.query(query).spread((results, metadata) => { 
            console.log("results> "+JSON.stringify(results));
          });
          _callback();
      },function(err){
        if(err){
            console.log(err);
        }else{
          console.log("*****ALL DATA HAS BEEN PROCESSED*****")
        }
    }); 
4

1 回答 1

0

我会尝试这些选项:

我现在看到您为每一行运行不同的查询。我要做的第一件事是将它们全部收集在一个查询语句中并只运行一次。像这样的东西(我会使用一个查询生成器来保护你免受可能的注入):

var array = [
    {id: 1, val:10}
  {id: 2, val:15}
];

console.log(array.reduce((s,v)=> s+"update table set col1="+v.val+" where id="+v.id+";", ""))

然后在事务中运行。

您还可以尝试在事务中使用 DELETE 和 INSERT 来“模拟”更新操作。批量插入听起来比多次更新快得多。

编辑:将 s+ 添加到 reduce 函数

于 2017-12-14T10:23:04.380 回答