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它也在工作,但整个过程变得缓慢。
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的情况下在更短的时间内完成许多行)
答案 0 :(得分:0)
我可以看到你的代码的问题。
首先,将字符串串联到查询中的方式是非常危险的(容易让其他人破解你的东西),而且它本身也很慢并且记忆力很大。每次执行+操作时,您都会为新字符串分配一个新字符串。
其次,数据库在集合操作中表现优异并且快速完成;如果你试图让所有东西都大于57166,为什么要一个接一个,只需构建这样的查询。
delete from users where id >= 57166;
。
如果需要是一个实际参数,请使用mysql2驱动程序中描述的预准备语句:https://github.com/sidorares/node-mysql2
您的查询将类似于:
delete from users where id >=?;
并且您将最小ID号作为参数传递。