WEB开发网
开发学院数据库DB2 减少与 DB2 for z/OS 的会话:第 2 部分(更多经过... 阅读

减少与 DB2 for z/OS 的会话:第 2 部分(更多经过检验的基础知识和一些新的编程技巧)

 2010-06-16 00:00:00 来源:WEB开发网   
核心提示: 一个不那么和蔼的人曾经问我:“哪种破产品会将值加载到工作存储库以避免连接到该产品?”我想了一会后回答:“那种能够认识到程序员有选择且有脑子,并理解避免不必要的调用、连接和获取页面是一个好主意的产品,减少与 DB2 for z/OS 的会话:第 2 部分(更多经

一个不那么和蔼的人曾经问我:“哪种破产品会将值加载到工作存储库以避免连接到该产品?”我想了一会后回答:“那种能够认识到程序员有选择且有脑子,并理解避免不必要的调用、连接和获取页面是一个好主意的产品。”由于 DB2 很快且有缓冲池,可以减少实际的 I/O 并不意味着要连接 DB2 100 万次来读取 10 行的表格,与此相比,连接 DB2 一次就将 10 行读取到工作存储表,然后寻址程序内存 100 万次要聪明的多。

减少重复执行嵌套选择的次数

考虑以下 SQL:

Select col1, col2, col3 
From big_table where item = :hv-item-just-read 
     And big_table.deptno in (select deptno from little_dept-table 
                  Where division = Eastern)

对于输入序列文件的每个选项,程序逻辑需要在一个大表格中进行查询,以获取 col1、col2 和 col3 的相关值。正如上文所述,希望输入的数据集按照项目编号进行排序,然后查看程序以了解该项目编号是否与查询完成前的编号有所不同。

但让我们更深入的查看 SQL。嵌套选择在 Eastern 分区创建一个部门列表,然后确保目标部门位于该列表中。我保证不需要太多精力就可以立即创建 “Eastern 分区的部门” 列表,然后可以执行查询,无需连接到 DB2。例如,我们可以使用 V8 行集定位指针连接 DB2 并获取列表;然后可以将 SQL 更改为硬编码列表,可以从我们的数组构建:

Declare CursorDept with rowset positioning for 
 Select deptno from little_dept-table 
 Where division = Eastern) 
Fetch next rowset from CursorDept 
 For 20 rows 
Into :hvarray-deptno 
(code to ensure that +100 was reached) 
Select col1, col2, col3 
From big_table where item = :hv-item-just-read 
 And big_table.deptno in (:hvdept1, :hvdept2, :hvdept3....:hvdept20

Tags:减少 DB for

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接