медленная вставка node-mysql с несколькими запросами

Я новичок в 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 (?,?,?), (?,?,?), (?,?,?)...

Я просто использую запросы неэффективным образом? Или здесь действительно проблема со скоростью запросов?


person andykais    schedule 23.06.2015    source источник
comment
С вашим текущим кодом система (узел, а также снова mysql) должна анализировать запрос 2000 раз. Если вы перепишете свой материал, чтобы использовать второй запрос, это произойдет только один раз. Также может быть полезно: stackoverflow.com/a/14259347/1169798   -  person Sirko    schedule 23.06.2015
comment
Проблема в том, что это значительно ограничивает мои возможности. Я хочу вставить внешние ключи, связанные с таблицей Main, но ключи трудно отслеживать с помощью одной единственной вставки.   -  person andykais    schedule 23.06.2015


Ответы (1)


Как упоминалось в комментариях, это просто медленный способ вставки данных mysql, его гораздо проще использовать.

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

где insert — переменная, содержащая несколько значений ввода

person andykais    schedule 05.09.2015