繁体   English   中英

使用node.js批量删除mysql行

[英]Bulk deletion of mysql rows using node.js

var Sequelize= require('sequelize')
var sequelize = new Sequelize('db', 'user', 'password',
{pool: { maxConnections: 5, maxIdleTime: 30 }})
var table = sequelize.define('User', 
{ 
       trip_paramid: Sequelize.INTEGER
},

{timestamps:false})

table.sync({ force: false }).success(function()
{
  table.destroy('`id` >= 5685321').success(function() {
  console.log("deleted");
  })
  table.destroy('`id` >= 9600000').success(function() {
  console.log("deleted");
  })
  table.destroy('`id` >= 15600000').success(function() {
  console.log("deleted");
  })
  table.destroy('`id` >= 20000000').success(function() {
  console.log("deleted");
  })
  table.destroy('`id` >= 25000000').success(function() {
  console.log("deleted");
  })
  table.destroy('`id` >= 35600000').success(function() {
  console.log("deleted");
  })
})

我在这里使用sequelize作为ORM来基于条件批量删除行。 这是工作。 但是现在我正在尝试不使用sequelize而执行相同的功能。 问题是因为我需要从现有数据库中删除行。 在这种情况下使用续集成为一个问题。 我试过不使用sequelize进行批量删除,它也可以正常工作,但是整个过程变慢了。

var mysql = require('mysql');              
var pool  = mysql.createPool({
connectionLimit : 10,
host            : 'host',
user            : 'user',
password        : 'password',
database        : 'db',
multipleStatements: true
 });


var id=57166;
var query='delete from users1 where id=';
bulkdelete();

function bulkdelete()
{
if(trip_paramid >=57166)
  {
   pool.query(query+ id+';'+query+(id+1)+';'+query+(id+1)+';'+query+(id+1)+';'+query+(id+1)+';', function(err, results) 
   {
    if (err) throw err;
    trip_paramid++;
        bulkdelete();
        console.log("deleted1");
    });
}
}

任何人都可以提出解决此问题的想法。 我需要加快处理速度(无需使用任何ORM即可在更短的时间内完成许多行)

我看到的几个与您的代码有关的问题。

首先,将字符串连接到查询中的方式非常危险(容易被其他人窃取您的资料),并且它本身也很慢,而且耗费内存。 您每次执行+操作都会分配一个新的字符串。

其次,数据库擅长设置操作并能快速完成操作。 如果要使所有内容都大于57166,为什么要一一进行,只需像这样构建查询即可。

delete from users where id >= 57166;

如果需要作为实际参数,请使用mysql2驱动程序中所述的准备好的语句: https : //github.com/sidorares/node-mysql2

您的查询将如下所示:

delete from users where id >=?;

并将最小ID号作为参数传递。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM