首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node.js批量删除mysql行

使用node.js批量删除mysql行
EN

Stack Overflow用户
提问于 2014-06-06 12:49:12
回答 1查看 1.2K关注 0票数 2
代码语言:javascript
复制
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就成了一个问题。我试着在没有使用sequelize的情况下批量删除,它也在工作,但整个过程变得很慢。

代码语言:javascript
复制
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的情况下,在更短的时间内处理很多行)

EN

回答 1

Stack Overflow用户

发布于 2014-06-06 13:02:09

我可以看到你的代码有几个问题。

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

其次,数据库擅长集合运算,而且速度很快;如果您试图获得大于57166的所有内容,为什么要逐个执行,只需像这样构建查询即可。

delete from users where id >= 57166;

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

然后,您的查询将如下所示:

delete from users where id >=?;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24074370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档