11. 尽可能减少DB2的SQL请求

性能调优中通常都要尽量减少对DB2的SQL请求,特别是批量程序,因为与其他程序相比,批量程序会处理更多的数据。每次向数据库管理器发送一个SQL调用都会带来开销,包括向DB2发送SQL语句的开销,以及从操作系统的一个地址空间到另一个地址空间以便DB2执行的开销。所以,一般来讲开发人员需要尽量减少:

打开/关闭时间游标的次数。

随机的SQL请求数(在DB2监视器中称为同步读)。

很多开发人员会采用过程方式考虑和编写代码。利用RDBMS开发应用并编写SQL时,开发人员需要更多地从关系角度来考虑。也就是说,他们需要考虑“怎样才能向数据库管理器发送最少的SQL语句来得到所需的全部数据,而不是做这么多的过程调用?”对于DB2来说,尽管执行一条Select语句可能效率很高,但是向DB2发送这个语句本身还是会带来开销。

一方面要尽量把所有调用都放在一个游标中,另一方面还要保证能够维护和理解逻辑,这二者之间存在一个平衡。不过要记住,如果将程序中的DB2调用减少10%或者更多,程序绝对会运行得更快。以下原则会对你很有帮助:

编写一个多表联接,而不是把它分解为单个游标。你可能会先建立一个驱动游标(Driver Cursor),然后在获取记录行时分解和打开/关闭其他游标。这种做法很不好,不要采用这种方式编写代码。正确的做法是,应当把所有工作都写在一个语句中。

编写外联接,而不是随机地执行存在性检查。然后再在另一个表的一个列中检查null来确定存在性。

要想只返回存在的行,应当编写exists子查询,而不是随机地执行单独的存在性检查查询。

在Select中根据需要指定列格式,而不是执行其他SQL语句来达到这个目的。可以在SQL语句的Select部分中对列应用必要的SQL标量函数,为它指定所需的格式。

用一个语句得到所需的全部日期信息,而不要发送多个不同的语句。

例如:

 

  1. SELECT CURRENT DATE + 7 DAYS,  
  2.       CURRENT DATE – 7 DAYS,  
  3.       LAST_DAY(CURRENT DATE)  
  4. FROM SYSIBM.SYSDUMMY1  
posted @ 2013-07-12 09:19  小土_  阅读(224)  评论(0编辑  收藏  举报