db2开发参考(8)

2020-02-22 14:09

1.19 import用法

DB2 IMPORT FROM GH1.OUT OF DEL MESSAGES ERR.TXT INSERT INTO DB2INST1.TB_DBF_MATCH_HA 注意要加SCHMA

1.20 values的使用

如果有多个 SET 语句给变量付值,最好使用VALUES语句,改写为一句。这样可以提高效率。

但要注意,VALUES不能将NULL值付给一个变量。

VALUES(NULL) INTO OUT_RETURN_CODE; 这个语句会报错的。

1.21 给select 语句指定隔离级别

SELECT * FROM TB_HEAD_STOCK_BALANCE WITH UR

1.22 atomic及not atomic区别

ATOMIC是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在ATOMIC块内的已经执行成功的语句也相当于没做,有点类似于TRANSACTION。

DB2编程性能注意 2.1 大数据的导表

EXPORT后再LOAD性能更好,因为LOAD不写日志,比SELECT INTO 要好。

2.2 SQL语句尽量写复杂SQL

尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL语句对性

能会有所改善。DB2的SQL ENGIEER对复杂语句的优化能力比较强,基本上不用当心语句的性能问题。ORACLE 则相反,推荐将复杂的语句简单化,SQL ENGIEER的优化能力不是特别好。这是因为每一个SQL语句都会有RESET SQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗。就是尽量减少SQL语句的个

数。

2.3 SQL SP及C SP的选择

首先,C的SP的性能比SQL 的SP 的要高。 一般而言,SQL语句比较复杂,而逻辑比较简单,SQL SP 与 C SP 的性能差异会比较小,这样从工作量考虑,用SQL写比较好。而如果逻辑比较复杂,SQL比较简单,用C写比较好。

2.4 查询的优化(HASH及RR_TO_RS)

DB2SET DB2_HASH_JOIN=Y (HASH排序优化)

指定排序时使用HASH排序,这样DB2在表JOIN时,先对各表做HASH排序,再JOIN,这样可以大大提高性能。DB2SET DB2_RR_TO_RS=Y 该设置后,不能定义RR隔离级别,如果定义RR,DB2也会自动降为RS. 这样,DB2不用管理NEXT KEY,可以少管理一些东西,这样可以提高性能。

2.5 避免使用count(*) 及exists的方法

1、首先要避免使用COUNT(*)操作,因为COUNT(*)基本上要对表做全部扫描一遍,

如果使用很多会导致很慢。

2、EXISTS比COUNT(*)要快,但总的来说也会对表做扫描,它只是碰到第一条符合的记录就停下来。

如果做这两中操作的目的是为

SELECT INTO 服务的话,就可以省略掉这两步。 直接使用SELECT INTO 选择记录中的字段。

如果是没有记录选择到的话,DB2 会将 SQLCODE=100 和 SQLSTATE=’20000’ 如果是有多条记录的话,DB2会产生一个错误。

程序可以创建 CONTINUE HANDLER FOR EXCEPTION CONTINUE HANDLER FOR NOT FOUND 来检测。 这是最快速的方法。

3、如果是判断是不是一条,可以使用游标来计算,用一个计数器,累加,达到预定值后就离开。这个速度也比COUNT(*) 要快,因为它只要扫描到预定值就不再扫描了,不用做全表的SCAN,不过它写起来比较麻烦。

2.6 提高INSERT性能---从游标装载

C:\\>DB2 CONNECT TO SAMPLE USER ADMINISTRATOR USING XIAOMA

数据库连接信息

数据库服务器 = DB2/NT 9.0.0 SQL 授权标识 = ADMINIST... 本地数据库别名 = SAMPLE

C:\\>DB2 CREATE TABLE NEW_STAFF AS (SELECT * FROM STAFF) DEFINITION ONLY

DB20000I SQL 命令成功完成。

C:\\>DB2 DECLARE STAFFCURSOR CURSOR FOR SELECT * FROM STAFF DB20000I SQL 命令成功完成。

C:\\>DB2 LOAD FROM STAFFCURSOR OF CURSOR INSERT INTO NEW_STAFF SQL3501W 由于对数据库禁用了正向恢复,因此,表所在的表空间将不会处于备份暂挂状态

SQL1193I

SQL3500W \阶段。

SQL3519W

SQL3520W

SQL3110N

SQL3519W

SQL3520W

SQL3515W \阶段。

读取行数跳过行数装入行数拒绝行数删除行数落实行数

实用程序开始从 SQL 语句 \装入数据。 在时间 \时,实用程序正在开始开始装入一致点。输入记录计数 = \。 “装入一致点”成功。 实用程序已完成处理。从输入文件读取了 \行。 开始装入一致点。输入记录计数 = \。 “装入一致点”成功。 在时间 \时,实用程序已完成了 = 35 = 0 = 35 = 0 = 0 = 35 2、 DB2表及sp管理 3.1 看存储过程文本

SELECT TEXT FROM SYSCAT.PROCEDURES WHERE PROCNAME='PROC1';

3.2 看表结构

DESCRIBE TABLE SYSCAT.PROCEDURES

DESCRIBE SELECT * FROM SYSCAT.PROCEDURES

3.3 查看各表对sp的影响(被哪些sp使用)

SELECT PROCNAME FROM SYSCAT.PROCEDURES WHERE SPECIFICNAME IN(SELECT DNAME FROM SYSIBM.SYSDEPENDENCIES WHERE BNAME IN ( SELECT PKGNAME FROM SYSCAT.PACKAGEDEP WHERE BNAME='TB_BRANCH'))

3.4 查看sp使用了哪些表

SELECT BNAME FROM SYSCAT.PACKAGEDEP WHERE BTYPE='T' AND PKGNAME IN(SELECT BNAME FROM SYSIBM.SYSDEPENDENCIES WHERE DNAME IN (SELECT SPECIFICNAME FROM SYSCAT.PROCEDURES WHERE PROCNAME='PR_CLEAR_MATCH_DIVIDE_SHA'))

3.5 查看function被哪些sp使用

SELECT PROCNAME FROM SYSCAT.PROCEDURES WHERE SPECIFICNAME IN(SELECT DNAME FROM SYSIBM.SYSDEPENDENCIES WHERE BNAME IN ( SELECT PKGNAME FROM SYSCAT.PACKAGEDEP WHERE BNAME IN (SELECT SPECIFICNAME FROM SYSCAT.FUNCTIONS WHERE FUNCNAME='GET_CURRENT_DATE')))

使用FUNCTION时要注意,如果想DROP 掉该FUNCTION必须要先将调用该FUNCTION的其它存储过程全部DROP掉。

必须先创建FUNCTION,调用该FUNCTION的SP才可以创建成功。

3.6 修改表结构

一次给一个表增加多个字段

DB2 \(2) ADD COLUMN T3 INT\

3、 DB2系统管理 4.1 创建Database

CREATE DATABASE HEAD USING CODESET IBM-EUCCN TERRITORY CN; 这样可以支持中文。

4.2 手工做数据库远程(别名)配置

DB2 CATALOG TCPIP NODE NODE1 REMOTE 172.28.200.200 SERVER 50000

DB2 CATALOG DB HEAD AS TEST1 AT NODE NODE1 然后既可使用:

DB2 CONNECT TO TEST1 USER ? USING ? 连上HEAD库了

4.3 连接数据库及看当前连接数据库

连接数据库

DB2 CONNECT TO HEAD USER DB2INST1 USING DB2INST1

当前连接数据库 DB2 CONNECT

4.4 停止启动数据库head

DB2 ACTIVATE DB HEAD DB2 DEACTIVATE DB HEAD

要注意的是,如果有连接,使用DEACTIVATE DB 不起作用。


db2开发参考(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:关于鄂东长江公路大桥工程涉河建设方案的批复

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: