WEB开发网
开发学院数据库DB2 程序员:使用 DB2 for z/OS 减少会话:第 1 部分:... 阅读

程序员:使用 DB2 for z/OS 减少会话:第 1 部分:Prem Mehra 说过:“没有比不执行的 SQL 性能更好的 SQL 了。”

 2009-11-14 00:00:00 来源:WEB开发网   
核心提示: 但是,另一个更加重要的问题在于 COUNT 是没有必要的,程序员:使用 DB2 for z/OS 减少会话:第 1 部分:Prem Mehra 说过:“没有比不执行的 SQL 性能更好的 SQL 了。”(2),因为 DB2 会在行更新时计算并在 SQL Communications Area (

但是,另一个更加重要的问题在于 COUNT 是没有必要的,因为 DB2 会在行更新时计算并在 SQL Communications Area (SQLCA) 的 SQLERRD(3) 中返回计算。您在测试程序时,可以检查这个 SQLCA 字段是否包含所需的 COUNT 信息。

据我所知,在执行维护时,DB2 会尽可能计入您的行。我知道至少有两个例外:

在分段表空间中删除(DELETE)某个表中的所有行时(也就是没有 WHERE 子句)

在通用表空间中删除(DELETE)某个表中的所有行时(DB2 9 中新增)

对位于这两类表空间中的表执行批量删除(DELETE)时,DB2 不需要单独寻址行,因此不会对它们计数 —— 但有三个例外:

启用 DATA CAPTURE 时

调用 VALIDPROC 时

使用行级安全性时

但是,批量 DELETE 最常用于工作表或临时表,它们极有可能体符合上述三种例外之一。

DB2 9 的一项新特性可允许您截断表,从而对它执行 “重新初始化”(通过重新设置 High-Used Relative Byte Address [HURBA] 或者通过删除并重新定义底层 VSAM 数据集 —— 非常类似于带空 INPUT 数据集的 LOAD)。这与批量 DELETE 相类似,也不会将它们计入行数。

COUNT(*):问题 2

我们来看另一个实际生活中的不正确使用的例子:

程序员:使用 DB2 for z/OS 减少会话:第 1 部分:Prem Mehra 说过:“没有比不执行的 SQL 性能更好的 SQL 了。”

我再次保证:我并不会在实际产生中使用这些例子。下面是程序员非常敬仰的信条:如果只有一个符合条件的行,则使用低速 CPU、路径较短的 Searched SELECT,如果多于一个符合条件的行,则使用路径较长的 CURSOR。

Tags:程序员 使用 DB

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