详细解决方案
关于for循环中delete 跟 拼接sql delete table in ()的效率比较?
热度:6030 发布时间:2013-02-25 21:13:49
现要根据id删除一批数据,
两种方法:
1 就是 for(int i = 0; i < ids.size(); i ++){
xxxService.deletById(ids.get(i));
}
2 拼接sql delete table id in (xxx,xxx,xxx,xxx)
如果这个数据有几百条甚至上千条,哪个效率更好点......
或有更好的方法....
------解决方案--------------------------------------------------------
这个我只知道in效率不高,一般都不提倡用in,但具体的与循环的效率这个我还真没研究过。等待楼下的解析!
------解决方案--------------------------------------------------------
不用 in 的路过~~ 没研究过循环和IN的效率问题 - -|||
------解决方案--------------------------------------------------------
第一种方法相当于你循环调用了service ,如果service上有注明事务、你相当于循环调用事务、
且没有声明事务,你也相当于循环操作了dao层、建议不要这样做、
第一种方法相当于 delete from table where id = 1;delete from table where id = 2;delete from table where id = 3;delete from table where id = 4;..... sql语句是很多的、相同的数据量相比之下肯定第二句比第一句快很多
第二种暂时也没有什么好的方式 建议批量处理的时候还是放弃框架的删除、使用原生sql、
如果是hibernate orm 框架 建议使用StatelessSession 无状态接口
http://blog.sina.com.cn/s/blog_57769b7b0100vgez
------解决方案--------------------------------------------------------
肯定是第二种快些,以为第一种循环开启事务 ,关闭事务,。。
------解决方案--------------------------------------------------------
我只能说你两种效率都不高。
1、效率慢在每次删除都进行一次数据库连接(网络连接是最耗时的)
2、in语句从设计之初就没把它当成高效来用
给你个第三种方案,效率会比这两个高很多,不是一个级别的。
3、用批处理。只连接一次数据库,同时又不用in
调整下你的方法
for(int i = 0; i < ids.size(); i ++){
xxxService.deletById(ids);
}
deletById方法里用batch操作删除语句
------解决方案--------------------------------------------------------
既然第二种用事务的时候,是将所有符合条件的删除放入同一个事务。第一种也应该将批量删除放入同一个事务,不然的话,需求不一样,也没什么好比较了。如果要求都放在同一个事务中,个人认为需要判断ids的中元素的多少,如果ids中很多,可以用第一种,可以用缓存进行分批删除。如果不多,用第二种比较方便,只需要写一个sql语句
相关解决方案
- 关于for循环中delete 跟 拼接sql delete table in ()的效率比较?
- 关于异常:attempt to create delete event with null entity
- table js排序,该如何处理
- hibernate 如何使用原始的SQL 语句进行insert update delete 操作
- jsp页面中加了<table>元素后,页面出现了一大片空白后才出现表格?解决方法
- jsp页面中加了<table>元素后,页面出现了一大片空缺后才出现表格
- Unknown table 'book' in field list
- Syntax error on tokens, delete these tokens
- C++/CLI 内 delete 释放内存的有关问题
- VS2010 RDLC 报表 表(table) 分页的时候怎么显示表头
- 后盾添加 table 样式不管用
- JQuery 基础有关问题 ! table
- table 点击td剔除整行
- 【误删除了表】SQL 小弟我不小心执行了 drop table 表
- Table 布局怎么改用CSS定位
- sql清空表数据用truncate table 表名处理,若表名是以数字开头,或者完全是数字,这句会报语法异常
- c# 网页采摘 TABLE
- sqltxet能不能这么写成"select *rowid from table"
- 大哥们救上命啊ArgumentException: 列“xxx”不属于表 Table
- 动态添加<table>遇到的有关问题
- table 细边框解决方法
- 要取TextBox里的值插入表, insert into table value(); 括号里应该如何写
- table 嵌套有关问题
- 在类名上这样写是啥[Table(Name = "Product")]解决方法
- <asp:ButtonField CommandName="Delete" Text="删除" />怎么添加删除对话框
- html中<table>和<asp:Tabel>有什么不一样啊该如何解决
- da.Fill(ds, startRecord, maxRecords, "table"); 工作原理解决办法
- web TABLE,该如何处理
- JS预览 Table
- Directory.Delete 有关问题 帮忙看下