数据库db2中有一万条记录,使用 insert into table(column1,column2,...)select …… 语句在数据库的命令窗口执行只需3秒钟,在继承自jdbcDaoSupport的java程序中,通过getJdbcTemplate().update(policyInsertSql);同样的SQL却执行了9分钟,请问有什么方式可以提高在java中执行的效率,我用的spirng版本为1.2.7,spring jdbc 的哪个api执行效率高啊,急啊,高分求回复
调试欢乐多
2# 减少有关sql的日志,或者干脆不要3秒钟和9分钟差得太远了,不知道楼主有没有打错字?
建议直接在数据库系统客户端直接执行。再有可能慢的原因是这个表建有索引,在每插入一条数据时会重建索引,导致 INSERT 语句缓慢。
为什么就不会用这个呢
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' ;
我以前提升的方法: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范围内。
-----------------------------------------------------------------
还有一些方略我要留着自己用。
你的 SQL 语句写得太强大了!