关于在for循环中执行sql语句效率的问题。

xieyunchao 2009-02-26 10:29:00
我们在项目中要用到批量删除的功能 ,我在项目中是这样写的:

String[] strArrayCheckIds = request.getParameterValues("checkid");

int iLength=strArrayCheckIds.length;

for(int i=0;i<iLength;i++){

//在这里我用执行了sql语句:delete from tablename where in=...的删除操作。

carService.delete(strArrayCheckIds[i]);
}

从以上可以看出,我的sql操作上放到for循环中的,也就是说如果我删除5条数据,那么,会连续执行5条sql的删除操作。


但是项目经理不让我那样写,说会影响效率,他让我用delete from tablename in(...)的方式来做。
以下是代码:

String petroId="0";
String[] strArrayCheckIds = request.getParameterValues("checkid");

int iLength=strArrayCheckIds.length;

for (int i = 0; i < iLength; i++){
petroId=petroId+","+strArrayCheckIds[i];
}
carPetroService.deleteByIds(petroId); //这里用delete from tablename where id in (....)的语法
return doList();

但是这种方法循环处理字符串,而用dele from tablname where id in(...)的语法来做的。但是这种sql的效率低啊。

哪种方法更好呢。效率上能差多少呢?
请高手指教!







...全文
2083 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinxiangsui2008 2009-02-26
  • 打赏
  • 举报
回复
在删除同样多条记录的情况下,记录一下各自开始的时间与结束时间,对比一下各自所需的执行时间
mumu_java 2009-02-26
  • 打赏
  • 举报
回复
可以使用批量删除或者考虑存储过程.
又是违规昵称 2009-02-26
  • 打赏
  • 举报
回复
carPetroService.deleteByIds( )
这个方法怎样实现的,你没有说
如果用拼sql的方法构造列表,一次执行,效率要高点,但是可能会导致列表过长异常。这个处理了就没事

如果是一个个的调用
carService.delete( )
那就跟你的没区别了

可以建议的是,在ado.net中,可以用
DbDataAdapter.ExecuteBatch()
方法来批量执行sql

在java中,可以用
PreparedStatement.executeBatch();
oraclelogan 2009-02-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 xieyunchao 的帖子:]
我们在项目中要用到批量删除的功能 ,我在项目中是这样写的:

String[] strArrayCheckIds = request.getParameterValues("checkid");

int iLength=strArrayCheckIds.length;

for(int i=0;i <iLength;i++){

//在这里我用执行了sql语句:delete from tablename where in=...的删除操作。

carService.delete(strArrayCheckIds[i]);
}

从以上可以看出,我的sql操作上放到for循环中的,也就是说如果…
[/Quote]

可以试下delete from tablename where exists(....)这种方式试试啊!
zzyang 2009-02-26
  • 打赏
  • 举报
回复
你们老大的意思可能是考虑到后台数据库处理机制,因为删除后都要commit;如果符合条件的有500条记录你的方法要commit;50次,而且每次判断后都要打断停下来,如果把这些需要删除的都找出来放在in里一次删除,然后只要commit;一次,效率比你的要高很多。
宇尘埃 2009-02-26
  • 打赏
  • 举报
回复
同意楼上
sheeplittl 2009-02-26
  • 打赏
  • 举报
回复
使用多个删除语句的话,会在jdbc中创建多个statement ,一条sql删除只创建一个,所以效率会高那么一点

2,668

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 认证与考试
社区管理员
  • 认证与考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧