繁体   English   中英

查询执行顺序

[英]Sequence of query execution

当有相关查询时,执行顺序是什么?

前任:

select
  p.productNo,
  (
    select count(distinct concat(bom.detailpart,bom.groupname)) 
    from dl_MBOM bom 
    where bom.DetailPart=p.ProductNo
  ) cnt1 
from dm_product p

虽然 DBMS 从dm_product读取记录的记录并且对于每个这样的记录查找dl_MBOM的值似乎很可能,但这并不一定会发生。

随着SQL查询你告诉DBMS主要做什么,而不是如何去做。 如果 DBMS 认为最好建立连接并对此进行处理,则可以随意这样做。

简短回答:未确定执行顺序。 (但是,您可以在许多 DBMS 中查看查询的执行计划以了解它是如何执行的。)

执行计划因数据库供应商而异。 对于Oracle,这里有一个类似的查询,以及相应的执行计划。

  select dname,
     ( select count( distinct job )
            from emp e
            where e.deptno = d.deptno
          ) x
  from dept d



---------------------------------------------------------------------------
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |      |       |       |     6 (100)|          |
|   1 |  SORT GROUP BY     |      |     1 |    11 |            |          |
|*  2 |   TABLE ACCESS FULL| EMP  |     5 |    55 |     2   (0)| 00:00:01 |
|   3 |  TABLE ACCESS FULL | DEPT |     4 |    52 |     2   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("E"."DEPTNO"=:B1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM