麦克米伦
网站管理员

加入:2003年5月18日 帖子:1204 地点:印度
|
|
|
|
我希望此信息将指导您:
引用: |
定义:相关子查询是指外部查询的至少一列。
包含相关子查询的任何谓词都是阶段2谓词。
示例:在以下查询中,相关名称X说明了子查询对外部查询块的引用。
选择*从DSN8610.EMP X
职位='设计者'
和存在(选择1
FROM DSN8610.PROJ
DEPTNO = X.WORKDEPT
AND MAJPROJ ='MA2100');
DB2做什么:为所引用的外部查询的每个合格行评估一个相关的子查询。在执行示例时,DB2:
1.从表EMP读取一行,其中JOB ='DESIGNER'。
2.在存储在内存中的表中,从该行中搜索WORKDEPT的值。
内存中的表保存子查询的执行。如果子查询已经使用WORKDEPT的值执行,则结果为
子查询在表中,并且DB2不会针对当前行再次执行该子查询。而是,DB2可以跳到步骤5。
3.如果WORKDEPT的值不在内存中,则执行子查询。这需要搜索PROJ表以检查是否有任何
当前的WORKDEPT负责的MAJPROJ项目为MA2100。
4.将WORKDEPT的值和子查询的结果存储在内存中。
5.将EMP当前行的值返回给应用程序。
DB2对EMP表的每个合格行重复此整个过程。
关于内存表的注释:如果包含子查询的谓词的运算符是以下之一,则内存表适用。
以下运算符:
<, <=, >, >=, =, <>, EXISTS, NOT EXISTS
但是,如果满足以下条件,则不使用该表:
子查询中有16个以上相关的列
相关列的长度之和超过256个字节
在外部查询的表的相关列的子集上有一个唯一索引 |
|
|