子查询的查询计划

如果连接的成本较低,那么优化器可自动将子查询更改成连接。

例如:图 1 中的 SET EXPLAIN ON 语句的样本输出显示了优化器将子查询中的表更改成连接中的内表。

图: 平铺子查询的部分 SET EXPLAIN 输出

QUERY:
------
SELECT company, fname, lname, phone
FROM customer c
WHERE EXISTS(
   SELECT customer_num FROM cust_calls u
      WHERE c.customer_num = u.customer_num)

Estimated Cost: 6
Estimated # of Rows Returned: 7

  1) virginia.c: SEQUENTIAL SCAN

  2) virginia.u: INDEX PATH  (First Row)

    (1) Index Keys: customer_num call_dtime   (Key-Only)
                                              (Serial, fragments: ALL)
        Lower Index Filter: virginia.c.customer_num = virginia.u.customer_num
NESTED LOOP JOIN  (Semi Join)

有关 SET EXPLAIN ON 语句的更多信息,请参阅显示由优化器选择的查询计划的报告

当优化器将子查询更改成连接时,它可以使用存取计划和连接计划的几种变形形式: