spring jdbcDaoSupport 执行效率低怎么解决

yongyuan93139 2009-07-25 02:34:33
数据库db2中有一万条记录,使用 insert into table(column1,column2,...)select …… 语句在数据库的命令窗口执行只需3秒钟,在继承自jdbcDaoSupport的java程序中,通过getJdbcTemplate().update(policyInsertSql);同样的SQL却执行了9分钟,请问有什么方式可以提高在java中执行的效率,我用的spirng版本为1.2.7,spring jdbc 的哪个api执行效率高啊,急啊,高分求回复。。。
...全文
483 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly8261861 2009-07-27
  • 打赏
  • 举报
回复
关注
效率问题真的很让人郁闷
yongyuan93139 2009-07-27
  • 打赏
  • 举报
回复
楼上的说的“为什么不会用这个呢”,“这个”指哪个啊??
  • 打赏
  • 举报
回复
乱稻草一堆!
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yongyuan93139 的回复:]
我的 sql 语句为
insert into db2inst1.YBTPOL (UPDATEED,POLFLAG,HEBAOFLAG,BANKCDE,SIGNEDDATE,APPSERNUM,POLICYNO,APPNAME,APPIDTYPE,APPIDNUM,INSNAME,INSIDTYPE,INSIDNUM,APPLNUM,ADMISSTATU,POLRESULT,GROSSPREM,RMARK) select 20090714, '1', yb.HEBAOFLAG, yb.BANKCDE, yb.SIGNEDDATE,  yb.APPSERNUM, ab.CHDRNUM ,ap.name, ap.type, ap.no,  ins.name ,ins.type, ins.no,  aa.APPLNUM  , aa.PROCFLG ,  ab.APPROVAL , ab.FIRSTPREM, ''  from  db2inst1.YBTINP yb  , db2inst1.AFIAPF af  , db2inst1.CANOPF ca  , db2inst1.EUAAPF aa  , db2inst1.EUABPF ab  , (select cl.CLNTNUM as num , cl.SURNAME as name , cl.ROLEFLAG35 as type, cl.SECUITYNO as no ,ad1.APPLNUM as app1  from db2inst1.CLNTPF cl ,db2inst1.EUADPF ad1 where ad1.CLNTNUM = cl.CLNTNUM  and ad1.ROLEFLAG= '1'  ) ap  , (select cl.CLNTNUM as num , cl.SURNAME as name , cl.ROLEFLAG35 as type, cl.SECUITYNO as no,ad2.APPLNUM as app2  from db2inst1.CLNTPF cl ,db2inst1.EUADPF ad2 where ad2.CLNTNUM = cl.CLNTNUM  and AD2.ROLEFLAG= '2'  ) ins  where af.CHDRNUM = yb.APPSERNUM  and ca.BATNUM = af.INVOICENO  and aa.APPLNUM = ca.CASENUM    and ab.APPLNUM = ca.CASENUM  and ap.app1=ca.CASENUM  and ca.CASENUM=ins.app2  and yb.HEBAOFLAG  = '0'  and ab.STAT_FUND = 'M' ;

[/Quote]

你的 SQL 语句写得太强大了!
APOLLO_TS 2009-07-27
  • 打赏
  • 举报
回复
直接执行SQL那可工作在OSI会话层的。

程序执行SQL--要在应用层和会话层反复交互。当然慢了。

---------------------------------------
我以前提升的方法:

INSERT INTO T_INPUT_TEMPLATE
SELECT 1,'文本输入框',NOW(),'text.ftl' UNION ALL
SELECT 2,'复选框',NOW(),'checkbox.ftl'UNION ALL
SELECT 3,'单选框',NOW(),'radio.ftl'UNION ALL
SELECT 4,'下拉列表框',NOW(),'select.ftl'UNION ALL
SELECT 5,'文件输入框',NOW(),'file.ftl';
。。。
100条一次事务提交,

---------------------------------------------------------------
还有文件装载方略:数据库都有一些方式 从文件保存数据,自然有恢复数据的:
load xxx.csv into table xxx
10000 items正好在excel 65000范围内。
-----------------------------------------------------------------
还有一些方略我要留着自己用。
yongyuan93139 2009-07-27
  • 打赏
  • 举报
回复
我的 sql 语句为
insert into db2inst1.YBTPOL (UPDATEED,POLFLAG,HEBAOFLAG,BANKCDE,SIGNEDDATE,APPSERNUM,POLICYNO,APPNAME,APPIDTYPE,APPIDNUM,INSNAME,INSIDTYPE,INSIDNUM,APPLNUM,ADMISSTATU,POLRESULT,GROSSPREM,RMARK) select 20090714, '1', yb.HEBAOFLAG, yb.BANKCDE, yb.SIGNEDDATE, yb.APPSERNUM, ab.CHDRNUM ,ap.name, ap.type, ap.no, ins.name ,ins.type, ins.no, aa.APPLNUM , aa.PROCFLG , ab.APPROVAL , ab.FIRSTPREM, '' from db2inst1.YBTINP yb , db2inst1.AFIAPF af , db2inst1.CANOPF ca , db2inst1.EUAAPF aa , db2inst1.EUABPF ab , (select cl.CLNTNUM as num , cl.SURNAME as name , cl.ROLEFLAG35 as type, cl.SECUITYNO as no ,ad1.APPLNUM as app1 from db2inst1.CLNTPF cl ,db2inst1.EUADPF ad1 where ad1.CLNTNUM = cl.CLNTNUM and ad1.ROLEFLAG= '1' ) ap , (select cl.CLNTNUM as num , cl.SURNAME as name , cl.ROLEFLAG35 as type, cl.SECUITYNO as no,ad2.APPLNUM as app2 from db2inst1.CLNTPF cl ,db2inst1.EUADPF ad2 where ad2.CLNTNUM = cl.CLNTNUM and AD2.ROLEFLAG= '2' ) ins where af.CHDRNUM = yb.APPSERNUM and ca.BATNUM = af.INVOICENO and aa.APPLNUM = ca.CASENUM and ab.APPLNUM = ca.CASENUM and ap.app1=ca.CASENUM and ca.CASENUM=ins.app2 and yb.HEBAOFLAG = '0' and ab.STAT_FUND = 'M' ;
yongyuan93139 2009-07-26
  • 打赏
  • 举报
回复
现在生产已经在用了,spring 不太好升级,

没有打错字,确实差的太远,所以才担心性能问题

如果用jdbcDaoSupport,sql日志不是很多。
zl3450341 2009-07-26
  • 打赏
  • 举报
回复
3秒钟跟9分钟 。。。。
  • 打赏
  • 举报
回复
对于大量数据的插入,不能一次性提交事务,可以 5000 条提交一次事务,否则的话数据库会吃不消的。

采用 INSERT INTO ... SELECT 这种方式不是很好,整个语句作为一个长事务。如果只是一次性操作的话,
建议直接在数据库系统客户端直接执行。

再有可能慢的原因是这个表建有索引,在每插入一条数据时会重建索引,导致 INSERT 语句缓慢。
  • 打赏
  • 举报
回复
通过程序插入是很慢的。上次插入 300 多万的数据花了一个半小时,而且还是利用原始的 JDBC 使用 executeBatch 进行操作的。
jumpheightway 2009-07-26
  • 打赏
  • 举报
回复
你都会写sql语句
为什么就不会用这个呢
晓筱时代 2009-07-25
  • 打赏
  • 举报
回复
1# 升级spring到3.0
2# 减少有关sql的日志,或者干脆不要

3秒钟和9分钟差得太远了,不知道楼主有没有打错字?
sooneasy 2009-07-25
  • 打赏
  • 举报
回复
关注。

81,092

社区成员

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

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