zoukankan      html  css  js  c++  java
  • 标量子查询 子查询执行次数计算公式

    select a.username,(select count(*) from all_objects b where b.owner=a.username) cnt from all_users a;
    
    create table a as select * from all_users;
    
    create table b as select * from all_objects;
    
    
    select a.username,(select count(*) from b where b.owner=a.username) cnt from a;
    
    
    SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
    
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    SQL_ID	2q0bhbzak85z9, child number 0
    -------------------------------------
    select a.username,(select count(*) from b where b.owner=a.username) cnt
    from a
    
    Plan hash value: 3049668959
    
    ----------------------------------------------------------------------------------------------
    | Id  | Operation	   | Name | Starts | E-Rows | A-Rows |	 A-Time   | Buffers | Reads  |
    ----------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT   |	  |	 1 |	    |	  36 |00:00:00.01 |	  6 |	   0 |
    |   1 |  SORT AGGREGATE    |	  |	36 |	  1 |	  36 |00:00:01.09 |   36756 |  36648 |
    |*  2 |   TABLE ACCESS FULL| B	  |	36 |	780 |  43773 |00:00:01.02 |   36756 |  36648 |
    |   3 |  TABLE ACCESS FULL | A	  |	 1 |	 36 |	  36 |00:00:00.01 |	  6 |	   0 |
    ----------------------------------------------------------------------------------------------
    
    Predicate Information (identified by operation id):
    ---------------------------------------------------
    
       2 - filter("B"."OWNER"=:B1)
    
    Note
    -----
       - dynamic sampling used for this statement (level=2)
    
    
    25 rows selected.
    
    标量子查询会执行传入的值 DISTINCT那么多次,这里传入的值是a.username 就是distinct(a.username)次
    
    
    SQL> 
    select count(distinct a.username) from a;SQL> 
    
    COUNT(DISTINCTA.USERNAME)
    -------------------------
    		       36
    
    
    改写成左链接:
    
    
    
      select a.username,nvl(b.cnt,0) from a left join (select count(*) cnt ,b.owner from b group by b.owner ) b
      on b.owner = a.username
      
      select a.username,count(b.owner) from  a left join  b on b.owner=a.username group by a.username
    
    
    
    
    
    
    
    
    
    

  • 相关阅读:
    CNN(卷积神经网络)入门
    基于linux vim环境python代码自动补全
    Linux 基本bash命令
    基于pytorch的CNN、LSTM神经网络模型调参小结
    深度学习中Batch size对训练效果的影响
    argparse.ArgumentParser()用法解析
    大数据学习之Hive数据仓库 20
    centOS中安装MySQL超级方便简单的方法
    大数据学习之zookeeper案例节点动态上下线感知19
    大数据学习之zookeeper客户端的命令行及API操作18
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3797882.html
Copyright © 2011-2022 走看看