程序员:使用 DB2 for z/OS 减少会话:第 1 部分:Prem Mehra 说过:“没有比不执行的 SQL 性能更好的 SQL 了。”
2009-11-14 00:00:00 来源:WEB开发网核心提示:很久以前,某同事 (Prem Mehra) 向我介绍了无用 SQL 的概念,程序员:使用 DB2 for z/OS 减少会话:第 1 部分:Prem Mehra 说过:“没有比不执行的 SQL 性能更好的 SQL 了。”,以及他再三引用的真理:“没有比不执行的 SQL 性能更好的 SQL 了,”
很久以前,某同事 (Prem Mehra) 向我介绍了无用 SQL 的概念,以及他再三引用的真理:“没有比不执行的 SQL 性能更好的 SQL 了。”在本系列文章中,我们将讨论完全没有用的、应该删除的 SQL、过度执行的 SQL,以及应该被替换的 SQL。目标是什么呢?如果可能,减少到 DB2 的连接,并完全删除一些连接。还有什么目标呢?了解 IBM DB2 8 和 DB2 9 中针对这些老问题的最新解决方案。因此,了解了我们了目标之后,欢迎阅读本系列文章的第 1 部分:如何删除或减少到 DB2 的连接。
COUNT(*):问题 1
在编写应该时应该严格遵守一些基本的性能规则。其中之一是删除程序中的所有没有用的 SELECT COUNT。另一个是如果无法安全避免则应该减少执行 COUNT 的数量。下面我们来看一些例子:
我在看到这样的 SQL 时,不免会产生疑问。为何会有一个 COUNT 在 UPDATE 前面?我进行了深入研究。是否检查了主机变量?如果它是 0,那么它的操作是什么呢?如果 COUNT 大于 0 会怎么样呢?下一个操作会依赖于 :hvcount 的内容吗?
COUNT 经常都是不必要的,并且可以完全清除。在本例中,程序员可能希望知道在执行 UPDATE 语句时会有多少个临时 (T) 员工将被更新为永久 (P) 状态。
这种方法存在两处错误。首先,除非您使用 ISOLATION RR,或者拥有对表的独占性维护访问,否则 COUNT 数量的合格的行读取与实际更新的行的数量会有不同。可以在 COUNT 和实际 UPDATE 之间执行删除、插入或更新操作。
更多精彩
赞助商链接