调优 SQL 过程
2008-09-09 10:03:14 来源:WEB开发网核心提示: 调优存在谓词我无法理解开发人员为何用下方所示方式编写存在检查(existential check),但是因为他们这样做了,调优 SQL 过程(6),所以我们就来讨论它,优秀的开发人员有时候似乎害怕执行那些可能导致 NOT FOUND 警告的语句,处理该逻辑的过程有一个最外层的检查,决定是执
调优存在谓词
我无法理解开发人员为何用下方所示方式编写存在检查(existential check),但是因为他们这样做了,所以我们就来讨论它。
优秀的开发人员有时候似乎害怕执行那些可能导致 NOT FOUND 警告的语句。下面的例子是一条模仿 MERGE 的语句。
这两个存在检查为何不好?
首先,要求 DB2 回答一个不相关的问题。仅仅为了检查某些行是否存在而迫使 DB2 计算一个表中的行数是一种代价极其高昂的选择。
其次,除非某一个表使用语句级触发器,否则,用显式查询来检查某一行是否存在的代价就与未找到要更新的行就执行 update 语句的代价一样高。在该行没有被查找到的情况下,这两种方式没有什么区别。但是如果已经通过 EXIST 谓词找到了这个行,那么 UPDATE 还是必须再次查找它。
因此,如果没有更多注释,这里有一种更好的方法,可用这种方法来处理通常用来处理条件更新和执行存在检查的显式方式。
当然,可以总是对单行使用显式 EXISTS 谓词和 MERGE 语句,两者将获得相似的性能。
CALL 回避
有许多种在紧凑循环(tight loop)中调用过程的情况。使用队列或关系中间表(staging table)的批处理过程就是一个例子。队列中的每个对象如果满足指定条件,就可能触发特殊处理。对于任何给定对象,这些条件通常很少为真。因此,处理该逻辑的过程有一个最外层的检查,决定是执行主体的其余部分,还是不采取任何动作而返回。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接