1. drop table test1;
  2. create table test1 as select * from dba_objects where rownum<1000;
  3.  
  4. drop table test2;
  5. create table test2 as select * from dba_objects where rownum<1000;
  6.  
  7. insert into test1 select * from test1;
  8.  
  9. update test2 set owner='SCOTT';
  10.  
  11. BEGIN
  12. DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SCOTT',
  13. tabname => 'TEST1',
  14. estimate_percent => 100,
  15. method_opt => 'for columns owner size 200',
  16. no_invalidate => FALSE,
  17. degree => 1,
  18. cascade => TRUE);
  19. END;
  20. /
  21.  
  22. BEGIN
  23. DBMS_STATS.GATHER_TABLE_STATS(ownname => 'SCOTT',
  24. tabname => 'TEST2',
  25. estimate_percent => 100,
  26. method_opt => 'for columns owner size 200',
  27. no_invalidate => FALSE,
  28. degree => 1,
  29. cascade => TRUE);
  30. END;
  31. /
  32.  
  33. SQL> select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
  34.  
  35. PLAN_TABLE_OUTPUT
  36. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  37.  
  38. --------------------------------------------
  39. SQL_ID a23r1uchdaafg, child number 0
  40. -------------------------------------
  41. An uncaught error happened in prepare_sql_statement : ORA-01403: no data found
  42.  
  43. Plan hash value: 1896454807
  44.  
  45. --------------------------------------------------------------------------------------
  46. | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
  47. --------------------------------------------------------------------------------------
  48. | 0 | SELECT STATEMENT | | 1 | | 1998 |00:00:00.07 | 13763 |
  49. |* 1 | FILTER | | 1 | | 1998 |00:00:00.07 | 13763 |
  50. | 2 | TABLE ACCESS FULL| TEST1 | 1 | 999 | 1998 |00:00:00.01 | 163 |
  51. |* 3 | TABLE ACCESS FULL| TEST2 | 1346 | 1 | 1346 |00:00:00.06 | 13600 |
  52. --------------------------------------------------------------------------------------
  53.  
  54. Predicate Information (identified by operation id):
  55. ---------------------------------------------------
  56.  
  57. 1 - filter(("OWNER"='SCOTT' OR IS NOT NULL))
  58. 3 - filter(("OWNER"='SCOTT' AND "OBJECT_ID"=:B1))
  59.  
  60. 21 rows selected.
  61.  
  62. 查看FILTER的执行次数,此时 被驱动表TEST2执行了1346次,那这个1346次是怎么计算的呢?
  63.  
  64. SQL> select count(*) from test1;
  65.  
  66. COUNT(*)
  67. ----------
  68. 1998
  69.  
  70. SQL> select count(distinct object_id) from test1;
  71.  
  72. COUNT(DISTINCTOBJECT_ID)
  73. ------------------------
  74. 999
  75.  
  76. 网上有人说是count(distinct join列),看来结果不对,有待研究
  77.  
  78. FILTER能改变驱动表?
  79. SQL> select /*+ leading(test2)*/ * from test1 where owner='SCOTT' or object_id in(select object_id from test2 where owner='SCOTT')
  80. 2 ;
  81.  
  82. 1998 rows selected.
  83.  
  84. Execution Plan
  85. ----------------------------------------------------------
  86. Plan hash value: 1896454807
  87.  
  88. ----------------------------------------------------------------------------
  89. | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
  90. ----------------------------------------------------------------------------
  91. | 0 | SELECT STATEMENT | | 52 | 4420 | 5 (0)| 00:00:01 |
  92. |* 1 | FILTER | | | | | |
  93. | 2 | TABLE ACCESS FULL| TEST1 | 999 | 84915 | 5 (0)| 00:00:01 |
  94. |* 3 | TABLE ACCESS FULL| TEST2 | 1 | 18 | 5 (0)| 00:00:01 |
  95. ----------------------------------------------------------------------------
  96.  
  97. FILTER无法改变驱动表
  98.  
  99. 1. 减少扫描 次数
  100.  
  101. 2. 无法减少扫描次数,减少扫描体积

FILTER的执行次数和驱动表问题的更多相关文章

  1. PostgreSQL EXPLAIN执行计划学习--多表连接几种Join方式比较

    转了一部分.稍后再修改. 三种多表Join的算法: 一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表 ...

  2. 如何让in/exists 子查询(半连接)作为驱动表?

    一哥们问我,怎么才能让子查询作为驱动表? SQL如下: select rowid rid from its_car_pass7 v where 1 = 1 and pass_datetime > ...

  3. 掌握MySQL连接查询到底什么是驱动表

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  4. MySQL连接查询驱动表被驱动表以及性能优化

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  5. [慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定

    写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程: 不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小: ...

  6. PLSQL_查询SQL的执行次数和频率(案例)

    2014-12-25 Created By BaoXinjian

  7. 【转】[慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定

    转自:http://zhengyun-ustc.iteye.com/blog/1942797 写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的 ...

  8. SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表)

    SWAP_JOIN_INPUTS Oracle Hint(处理hash join强制大表(segment_size大)作为被驱动表) swap_join_inputs是针对哈希连接的hint,它的含义 ...

  9. 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表

    一.为什么要用小表驱动大表 1.驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表 ...

随机推荐

  1. WORLD OPERATS

        word文章设置无法复制 通常我们会采用设置密码的方式,规定某个文档的使用范围. 但这种方法是有一个局限,那就是可以观看文档的人未必靠谱,万一复制了文档的重要内容怎么办? 因此,不妨考虑加上禁 ...

  2. javascript 属性的特性

    /* 属性的特性: 可以通过调用Object.getOwnPropertyDescriptor()可以获得某个对象特定属性的属性描述符, 从函数名字就可以看出, Object.getOwnProper ...

  3. Windows消息传递机制具体解释

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka Windows是一个消息(Message)驱动系统.Windows的消息提供了应用程序之间.应 ...

  4. gzip优化网络传输量提高传输效率[转]

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;us ...

  5. Android组件系列----BroadcastReceiver广播接收器

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  6. mysql 热备

    全备份:(生成时间戳文件夹:2016-04-20_16-12-01)innobackupex --users=root --password=root /tmp/backup 第一次增量备份:(生成时 ...

  7. Vitamio VideoView 示例

    VideoView 播放本地视频 /**  * 会根据视频尺寸自动缩放  * 自己对VideoView设置的宽高基本不起任何作用  */ public class VideoViewDemo exte ...

  8. 小学生之深入C#

    一.深入C#数据类型 值类型传递和引用类型传递 方法的参数是值类型和引用类型 注意:值传递和引用传递判定依据是有没有ref 01.如果方法的参数类型本身就是引用类型,那么对参数值的修改会永久保存 例如 ...

  9. 关于IIS部署成功后,局域网其他用户无法访问的问题解决方法

    关于win7部署iis后,局域网的其他用户不能访问的问题.   在win7系统中,部署好iis后,自己本地可以发布和预览.但在局域网中的其他用户不可以访问.下面说一下这个原因. 这是因为win7自带的 ...

  10. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...