原帖由 yulihua49 于 2010-10-22 15:47 发表 ![]()
今天,到现在为止,DAU的DB2包装基本完成了。
有些与ORACLE不同,1.没找到RETURNING子句的写法,2.存储过程接口暂缺。3.数组插入操作还没做。db2的数组读取是比较方便的,已经实现了。
前边说的ORACLE的怪异现象不存在,插入时发生重码就跳过,速度比成功插入要快。
插入时发生重码就修改,与纯插入速度差不多,这点比ORACLE好。
纯粹插入,真正的操作是比ORACLE快的,插7552个记录,0.8秒,ORACLE是1.2秒。但最后的CLOSE DATABASE,0.5秒,拉了后腿,整体速度与ORACLE差不多。
单条插入,每秒9000啊,不简单。
软解析,在连接内有效,不像ORACLE全部有效。这样,使用中间件就很有必要,中间件打开一些数据库连接,大量用户共享这些连接,这些连接里的语句都可以软解析。
现在看来,不写SQL语句真好。在ORACLE下生成ORACLE语句,在DB2下生成DB2语句,应用程序无需修改。
如你写了一个语句:
sprintf(stmt,"where begdate<=:begdate and enddate >=:begdate")
在ORACLE下,生成:
。。。。。。。。where begdate<=to_date(:12,'YYYY-MM-DD') and enddate>=to_date(:13,'YYYY-MM-DD')
在DB2下生成:
。。。。。。。。where begdate<=? and enddate>=?
应用程序一点都不改的。真好。
分析一个表结构,用以生成模板,ORACLE需要6ms,没有软解析,因为用到多表查询(一次双表查询,一次单表查询)。
DB2需要20ms(三个单表查询),但分析第二次就只需要1.2ms了,在本连接内实现了软解析。
还是前边那个tjrb表,生成这样的语句:
INSERT INTO ZHOUGX.tjrb (TJDATE,UNIT,TABNAME,FLG,DAT1,DAT2,DAT3,DAT4,DAT5,DAT6,DAT7,DAT8,DAT9,DAT10,DAT11,DAT12,DAT13,DAT14,
DAT15,DAT16,DAT17,DAT18,DAT19,DAT20,DAT21,DAT22,DAT23,DAT24,DAT25,DAT26,DAT27,DAT28,DAT29,DAT30,DAT31,DAT32,DAT33,DAT34,
DAT35,DAT36,DAT37,DAT38,DAT39,DAT40,DAT41,DAT42,DAT43,DAT44,DAT45,DAT46,DAT47,DAT48,DAT49,DAT50) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
而update语句成了这个样子:
UPDATE ZHOUGX.tjrb SET TJDATE=? ,UNIT=? ,TABNAME=? ,FLG=? ,DAT1=? ,DAT2=? ,DAT3=? ,DAT4=? ,DAT5=? ,DAT6=? ,DAT7=? ,DAT8=? ,
DAT9=? ,DAT10=? ,DAT11=? ,DAT12=? ,DAT13=? ,DAT14=? ,DAT15=? ,DAT16=? ,DAT17=? ,DAT18=? ,DAT19=? ,DAT20=? ,DAT21=? ,DAT22=? ,
DAT23=? ,DAT24=? ,DAT25=? ,DAT26=? ,DAT27=? ,DAT28=? ,DAT29=? ,DAT30=? ,DAT31=? ,DAT32=? ,DAT33=? ,DAT34=? ,DAT35=? ,DAT36=? ,
DAT37=? ,DAT38=? ,DAT39=? ,DAT40=? ,DAT41=? ,DAT42=? ,DAT43=? ,DAT44=? ,DAT45=? ,DAT46=? ,DAT47=? ,DAT48=? ,DAT49=? ,DAT50=?
WHERE TJDATE=? AND UNIT=? AND TABNAME=? AND FLG=? ,
[ 本帖最后由 yulihua49 于 2010-10-22 17:07 编辑 ] |