在javaeye的论坛上问了居然没一人回复,回来请教CSDN的各位高手,prepareStatement中使用in 的问题

phoenixdarkfire 2007-09-11 01:24:47
我这里有段代码原来是用prepareStatement的批处理来处理一批sql语句:
select p.datatype, p.userfieldid, u.datetimevalue, u.intvalue, u.stringvalue, u.decimalvalue, u.notes from tr_userfield p, tr_requestvalue u where p.userfieldid = u.userfieldid and u.userfieldid in (6580,6561,6562) and u.requestid = ?
在执行的时候循环赋值,我想提高下查询的效率,所以用IN来替换:
select u.requestid,p.datatype, p.userfieldid, u.datetimevalue, u.intvalue, u.stringvalue, u.decimalvalue, u.notes from tr_userfield p, tr_requestvalue u where p.userfieldid = u.userfieldid and u.userfieldid in (6580,6561,6562) and u.requestid in(2540,2541,2560,2406,2408,2411,2412,2414,2416,2417,2420,2424,2423,2428,2435,2429,2430,2431,2433,2434,2436,2399,2437,2444,2438,2440,2441,2660,2661,2700,2449,2450,2454,2641,2402,2600,2419,2458,2680,2620,2461,2463,2464,2465,2640,2720,2580,2468,2469,2470,2418,2473,2474,2446,2451,2453,2456,2581)order by u.requestid
但是执行之后发现时间并没有减少,是不是prepareStatement的批处理效率已经很高了不能再优化了?用
IN的SQL用了order by, 是不是这个原因呢?
...全文
358 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
bushuang 2008-01-25
  • 打赏
  • 举报
回复
把 IN 换成 exists看看
ansili521 2008-01-09
  • 打赏
  • 举报
回复
order by group by 都会.降低.效率
sulo_xxr 2007-09-13
  • 打赏
  • 举报
回复
你把二个in的先后顺序换一下看看。这都主要是sql优化问题,不关JAVA的事.
在一个跟采用何种DB有关的。
yilinhust 2007-09-13
  • 打赏
  • 举报
回复
按道理LZ的第二条语句更加费时,如果大量数据用索引,过程是必须的

索引使用原则如下:
1>.在条件表达式中经常用到的不同值较多的列上建立索引

2>.在不同值少的列上不要创建索引
比如:在员工表的[性别]列上只有“男”或者“女”两个不同值,如果建立索引,不但不会提高查询效率,反而会降低更新速度

3>.在经常进行连接,但是没有指定为外键的列上建立索引

4>.在频繁进行排序或分组的列上建立索引

5>.在连接查询中,对表的顺序存取可能对查询效率产生致命的影响。避免这种情况的主要方法就是对连接的列进行索引。


zxl_long 2007-09-13
  • 打赏
  • 举报
回复
如果经常这样查询,为什么不在数据库端进行优化设计呢?
用JDBC优化效果不大
malligator 2007-09-13
  • 打赏
  • 举报
回复
然后我看是乱说了:
LZ给的例子好像是有规律的,都比较接近,24## / 25##
可以找出最大最小值用一个between .. and ..把该取的数据一次取出来再处理一下呢?
malligator 2007-09-13
  • 打赏
  • 举报
回复
数据量有多大的呢?

能否一次把所有数据取出来?
phoenixdarkfire 2007-09-12
  • 打赏
  • 举报
回复
看来是找不到好的方法了?
phoenixdarkfire 2007-09-11
  • 打赏
  • 举报
回复
不好意思,我没有说很清楚,这个项目是客户的产品,数据库的设计是不能更改的:((。
Michaelehome 2007-09-11
  • 打赏
  • 举报
回复
将in里的数据,放在临时表中,然后将sql修改为两表关联的方式去查询会快很多。
feizm 2007-09-11
  • 打赏
  • 举报
回复
前半句写成视图,再查
bushuang 2007-09-11
  • 打赏
  • 举报
回复
..
beiouwolf 2007-09-11
  • 打赏
  • 举报
回复
就是能做点优化也不可能有什么提高一倍时间的....
除非你本身的设计做的一塌糊涂..那当我没说..
phoenixdarkfire 2007-09-11
  • 打赏
  • 举报
回复
我也知道IN很费时间,但是现在的项目就是要求要提高一倍的时间,有人有什么好的建议吗?
yaven 2007-09-11
  • 打赏
  • 举报
回复
其实这里也没有什么高手,高手都潜水了.
我的问题,只有点击.
malligator 2007-09-11
  • 打赏
  • 举报
回复
in 很费的

62,623

社区成员

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

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