此两种做法哪个效率高些?为什么?

flyylf 2006-03-16 11:57:02
需要查询满足条件的所有记录,表呢不大也就400条,
是这样的:

先拿到一个请求数组 String[] a=new String[?];
数组长度不确定,可能是2个,3个,也可能是100多200多.
查询数据库表中满足字段值与数组元素相等的所有记录:


String sqltail=""
for(int i=0;i<a.length;i++){
sqltail+=a[i]+","
}
处理一下sqltail.
然后:
select name from table where id(a[1],a[2],a[3]......);这样好呢


还是
for(int i=0;i<a.length;i++){
sql="select name from table where id="+a[i];
db.executeQuery(sql);
....
}
求答案,哪个效率高些呢?谢谢
...全文
122 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢天xi地 2006-03-16
  • 打赏
  • 举报
回复
使用批处理吧.
lzmhehe 2006-03-16
  • 打赏
  • 举报
回复
mark
学习
polarman 2006-03-16
  • 打赏
  • 举报
回复
前一种方法可能会造成SQL语句太长,数据库系统对SQL语句的长度可能会有限制
后一种方法会造成交互的次数过多,影响效率
建议采用折中的办法,10个(当然可以自定)分一组用in查询
flyylf 2006-03-16
  • 打赏
  • 举报
回复
写错了
处理一下sqltail.
然后:
select name from table where id in (a[1],a[2],a[3]......);这样好呢

少了一个in 字
wizardblue 2006-03-16
  • 打赏
  • 举报
回复
几百个字段也太恐怖了一点吧
interpb 2006-03-16
  • 打赏
  • 举报
回复
第二种你执行的查询太多了吧

自己在方法执行的前后

long l1 = System.currentTimeMillis() ;
//select operation
long l2 = System.currentTimeMillis() ;

long l = l1 - l2 ;
比较一下就可以了
  • 打赏
  • 举报
回复
北极人说得对.不过对于数目可能没实际测过.我是做过比较长的SQL语句的,大致有些印象,对于ID来说,一般不会是超过12个字符长度的,所以基本可以20为一组.
flyylf 2006-03-16
  • 打赏
  • 举报
回复
楼上老兄,批处理大概怎么做?请教.

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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