• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    DB2编程序技巧 (六)

    发布者: 404号房间 | 发布时间: 2025-6-18 12:48| 查看数: 91| 评论数: 0|帖子模式

    正在看的db2教程是B2编程序技巧 (六)。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,这样可以大大提高性能。
       剧沈刚说做实验,7个一千万条记录表的做join取10000条记录,再没有索引的情况下  72秒。

    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,不过它写起来比较麻烦。


    3 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'))

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表