我假设这个(批量删除):
for(int i=0;i<10;i++){
updateToStatus1(i, 1); //update table set status = 1 where id = :i
}
deleteAllStatus1();//delete from table where status = 1
比这更快(删除一个一个):
for(int i=0;i<10;i++){
delete(i); //delete from table where id = i
}
无论我在&#34; table&#34;上创建什么索引,我的假设都是正确的吗?我认为在逐个删除时会涉及很多锁定。
另外,如果有人能就推荐有关此类SQL权衡的材料推荐我,我将非常感激。
答案 0 :(得分:1)
我认为逐行更新行几乎与删除它们的时间大致相同(当然取决于索引) - 所以我无法想象组合更新+批量删除比一个一个地删除。
最快的方法是让方法delete(int...)
发出DELETE ... WHERE ID IN(...)
。
答案 1 :(得分:1)
我假设这个(批量删除):
for(int i=0;i<10;i++){
updateToStatus1(i, 1); //update table set status = 1 where id = :i
}
deleteAllStatus1();//delete from table where status = 1
比这更快(删除一个一个):
for(int i=0;i<10;i++){
delete(i); //delete from table where id = i
}
我只能假设第一个T1 > T2
所花费的时间(第二个时间)
status
,与之前相比,更新将变得昂贵(因为它会更改索引关键字的值)。 我认为删除时会涉及很多锁定 一个接一个。
所以你的时间比较是:
updating one by one + deleting all
vs deleting one by one
对于相同数据的单个事务提交将比在多个事务中提交花费更少的时间。但这里有更新开销。
此外,如果有人可以推荐我关于材料的好 这样的SQL权衡
对于jdbc提示:
http://shop.oreilly.com/product/9780596000882.do
索引(尽管DB2仍然有用):Indexing
我还建议您为正在使用的数据库搜索sql查询和数据导入/导出的性能调优。这些通常可在参考手册中找到。喜欢:
MySQL sql optimization
InnoDB performance tuning