【问题标题】:node-mysql slow insert with multiple queriesnode-mysql 带有多个查询的慢速插入
【发布时间】:2015-06-23 14:06:02
【问题描述】:

我是 node-mysql 的新手,但我遇到了一个令人担忧的速度问题,因为它非常简单。 我正在处理相当合理的数据量(2000 个 mysql 条目),当我使用多个查询时,通过 connection.query() 输入它变得非常慢。代码是这样的

var rows = xlsx.rows;
for (var i=0; i<rows.length; ++i) {
    var escaped = '';
    var values = [];
    var row = rows[i];
    escaped += 'INSERT INTO Main (name, value, enabled) VALUES ';

    var name = row['name'];
    var val = row['value'];
    var enabled = rows['enabled'];

    escaped += '(?,?,?);';
    values.push(name);
    values.push(val);
    values.push(enabled);

    connection.query(escaped, values);
}

输入所有行需要一分钟以上的时间。当我在一个查询中使用多个语句时,也出现了同样的问题。我唯一能够快速且几乎立即输入所有行的情况是,如果我使用一个字符串和一个条目,也就是

INSERT INTO Main (name, value, enabled) VALUES (?,?,?), (?,?,?), (?,?,?)...

我只是以低效的方式使用查询吗?或者这里的查询速度是否存在实际问题?

【问题讨论】:

  • 使用您当前的代码,系统(节点以及 mysql 再次)必须解析查询 2000 次。如果你重写你的东西以使用第二个查询,这只会发生一次。也可能有帮助:stackoverflow.com/a/14259347/1169798
  • 问题是这极大地限制了我可以做的事情。我想插入与表 Main 相关的外键,但单次插入很难跟踪这些键

标签: javascript mysql node-mysql


【解决方案1】:

如cmets中所说,这只是一种插入mysql数据的慢方法,使用起来要容易得多

connection.query('INSERT INTO Table (col1, col2) VALUES ?', [insert], callback);

其中insert 是一个包含多个条目值的变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2016-01-10
    • 2017-05-21
    • 2020-02-22
    • 2018-01-22
    相关资源
    最近更新 更多