DB2编程序技巧 (六)_DB2数据库教程-查字典教程网
DB2编程序技巧 (六)
DB2编程序技巧 (六)
发布时间:2016-12-28 来源:查字典编辑
摘要:正在看的db2教程是:DB2编程序技巧(六)。2.2SQL语句尽量写复杂SQL尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL...

正在看的db2教程是:DB2编程序技巧 (六)。2.2 SQL语句尽量写复杂SQL

尽量使用大的复杂的SQL语句,将多而简单的语句组合成大的SQL语句对性能会有所改善。

DB2的SQLEngieer对复杂语句的优化能力比较强,基本上不用当心语句的性能问题。

Oracle则相反,推荐将复杂的语句简单化,SQLEngieer的优化能力不是特别好。

这是因为每一个SQL语句都会有resetSQLCODE和SQLSTATE等各种操作,会对数据库性能有所消耗。

一个总的思想就是尽量减少SQL语句的个数。

2.3 SQLSP及CSP的选择

首先,C的sp的性能比sql的sp的要高。

一般而言,SQL语句比较复杂,而逻辑比较简单,sqlsp与csp的性能差异会比较小,这样从工作量考虑,用SQL写比较好。

而如果逻辑比较复杂,SQL比较简单,用c写比较好。

2.4 查询的优化(HASH及RR_TO_RS)

db2set DB2_HASH_JOIN=Y (HASH排序优化)

指定排序时使用HASH排序,这样db2在表join时,先对各表做hash排序,再join,这样可以大大提高性能。

剧沈刚说做实验,7个一千万条记录表的做join取10000条记录,再没有索引的情况下72秒。

db2set DB2_RR_TO_RS=Y

该设置后,不能定义RR隔离级别,如果定义RR,db2也会自动降为RS.

这样,db2不用管理Nextkey,可以少管理一些东西,这样可以提高性能。

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

1、首先要避免使用count(*)操作,因为count(*)基本上要对表做全部扫描一遍,如果使用很多会导致很慢。

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

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

selectinto服务的话,就可以省略掉这两步。

直接使用selectinto选择记录中的字段。

如果是没有记录选择到的话,db2会将sqlcode=100和sqlstate='20000'

如果是有多条记录的话,db2会产生一个错误。

程序可以创建continuehandlerforexception

continuehandlerfornotfound

来检测。

这是最快速的方法。

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

3 DB2表及sp管理

3.1 看存储过程文本

selecttextfromsyscat.procedureswhereprocname='PROC1';

3.2 看表结构

describetablesyscat.procedures

describeselect*fromsyscat.procedures

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

selectPROCNAMEfromSYSCAT.PROCEDURESwhereSPECIFICNAMEin(selectdnamefromsysibm.sysdependencieswherebnamein(selectPKGNAMEfromsyscat.packagedepwherebname='TB_BRANCH'))

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新DB2数据库学习
    热门DB2数据库学习
    编程开发子分类