一次删除文件与一次运行中删除同一组文件?

时间:2014-07-18 08:02:06

标签: java sql sql-server

我假设这个(批量删除):

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权衡的材料推荐我,我将非常感激。

2 个答案:

答案 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所花费的时间(第二个时间)

  • 在loop1更新(通过id和update staus查找)是一个写操作,如delete2(在id和删除行中查找)在loop2中
  • 如果您索引status,与之前相比,更新将变得昂贵(因为它会更改索引关键字的值)。
  • 索引状态也会对基于状态的删除产生负面影响。
  

我认为删除时会涉及很多锁定   一个接一个。

  • 对于逐个更新也是如此

所以你的时间比较是: updating one by one + deleting all vs deleting one by one

对于相同数据的单个事务提交将比在多个事务中提交花费更少的时间。但这里有更新开销。

  

此外,如果有人可以推荐我关于材料的好   这样的SQL权衡

对于jdbc提示: http://shop.oreilly.com/product/9780596000882.do

Chapter 19 Performance

索引(尽管DB2仍然有用):Indexing

我还建议您为正在使用的数据库搜索sql查询和数据导入/导出的性能调优。这些通常可在参考手册中找到。喜欢:
MySQL sql optimization
InnoDB performance tuning