查看: 4226|回复: 7

这个 filter ( IS NOT NULL)是什么意思?

[复制链接]
论坛徽章:
3
优秀写手
日期:2013-12-18 09:29:102014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
跳转到指定楼层
1#
发表于 2015-11-29 17:34 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
各位好:
      请问在以下附图的执行计划中的 ID 为 1 的 执行步骤 FILTER 对应的执行信息 1 - filter ( IS NOT NULL) 是什么意思呢?


论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
2#
发表于 2015-11-29 19:35 | 只看该作者
我感觉是少了字段名.

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
3#
发表于 2015-11-30 08:44 | 只看该作者
lfree 发表于 2015-11-29 19:35
我感觉是少了字段名.

这里的filter 不是跟NL 很类似么?
只不过这里维护了hash 表

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
4#
发表于 2015-11-30 08:53 | 只看该作者
lz 把sql语句帖出来把。。

使用道具 举报

回复
论坛徽章:
40
技术图书徽章
日期:2023-02-28 10:16:02暖羊羊
日期:2015-02-10 17:19:24马上有房
日期:2015-01-12 10:57:17ITPUB社区OCM联盟徽章
日期:2014-08-27 17:33:52青年奥林匹克运动会-帆船
日期:2014-08-27 13:50:412014年世界杯参赛球队: 哥伦比亚
日期:2014-07-10 14:10:592014年世界杯参赛球队:墨西哥
日期:2014-06-24 10:38:072014年世界杯参赛球队: 加纳
日期:2014-06-23 13:12:032014年世界杯参赛球队: 美国
日期:2014-05-21 08:18:36沸羊羊
日期:2015-03-04 14:51:52
5#
发表于 2015-11-30 09:45 | 只看该作者
EMPNO是否有索引

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2013-12-18 09:29:102014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
6#
 楼主| 发表于 2015-11-30 12:48 | 只看该作者
SQL如下:
04:58:26 SYS@orcl*SQL> select empno,ename from scott.emp where empno in (select /*+ no_unnest */ empno from emp_mgr_view);

               EMPNO ENAME
-------------------- --------------------
                7566 JONES
                7698 BLAKE
                7782 CLARK



执行计划
05:10:50 SYS@orcl*SQL> select * from table(dbms_xplan.display_cursor(null,null,'advanced'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  bv39y8w2ymdx7, child number 0
-------------------------------------
select empno,ename from scott.emp where empno in (select /*+ no_unnest
*/ empno from emp_mgr_view)

Plan hash value: 4147161479

-------------------------------------------------------------------------------------
| Id  | Operation            | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT     |              |       |       |    24 (100)|          |
|*  1 |  FILTER              |              |       |       |            |          |
|   2 |   TABLE ACCESS FULL  | EMP          |    14 |   140 |     3   (0)| 00:00:01 |
|*  3 |   VIEW               | EMP_MGR_VIEW |     3 |    39 |     3   (0)| 00:00:01 |
|*  4 |    COUNT STOPKEY     |              |       |       |            |          |
|*  5 |     TABLE ACCESS FULL| EMP_TEMP     |     3 |    36 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
......省略部分......

Outline Data
-------------
......省略部分......

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

   1 - filter( IS NOT NULL)
   3 - filter("EMPNO"=:B1)
   4 - filter(ROWNUM<10)
   5 - filter("JOB"='MANAGER')

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
7#
发表于 2015-11-30 14:49 | 只看该作者
select empno,ename from scott.emp where empno in (select /*+ no_unnest */ empno from emp_mgr_view);

emp_mgr_view 的定义吗?

使用道具 举报

回复
论坛徽章:
194
红宝石
日期:2014-05-09 08:24:37萤石
日期:2014-01-03 10:25:39奥运会纪念徽章:羽毛球
日期:2008-07-01 10:46:06奥运会纪念徽章:马术
日期:2008-07-07 17:43:24奥运会纪念徽章:射箭
日期:2008-07-25 18:07:39奥运会纪念徽章:皮划艇激流回旋
日期:2008-07-30 10:02:57奥运会纪念徽章:花样游泳
日期:2008-09-26 13:02:43奥运会纪念徽章:排球
日期:2008-12-03 11:23:272010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-02-26 11:08:44
8#
发表于 2015-12-8 07:47 | 只看该作者
[20151207]filter( IS NULL).txt

--前一阵子别人问的问题,filter (IS NOT NULL)是什么意思?
-- http://www.itpub.net/thread-1943880-1-1.html

--正好看刘工的视频"51CTO学院-Oracle性能优化精讲视频课程【刘相兵】-ORACLE Maclean 的Oracle性能优化讲座",找到如下
--语句,通过它来说明?

SCOTT@book> @ &r/ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


SCOTT@book> alter session set statistics_level=all;
Session altered.

SELECT /*+ RULE to make sure it reproduces 100% */
      ename
      ,job
      ,sal
      ,dname
  FROM emp, dept
WHERE     dept.deptno = emp.deptno
       AND NOT EXISTS
              (SELECT *
                 FROM salgrade
                WHERE emp.sal BETWEEN losal AND hisal);


SCOTT@book> @ &r/dpcz
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  anbbf4bvm5n5n, child number 0
-------------------------------------
SELECT /*+ RULE to make sure it reproduces 100% */       ename
,job       ,sal       ,dname   FROM emp, dept  WHERE     dept.deptno =
emp.deptno        AND NOT EXISTS               (SELECT *
  FROM salgrade                 WHERE emp.sal BETWEEN losal AND hisal)
Plan hash value: 243245009
-------------------------------------------------------------------------------------------
| Id  | Operation                     | Name     | Starts | A-Rows |   A-Time   | Buffers |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |          |      1 |      0 |00:00:00.01 |     109 |
|*  1 |  FILTER                       |          |      1 |      0 |00:00:00.01 |     109 |
|   2 |   NESTED LOOPS                |          |      1 |     14 |00:00:00.01 |      25 |
|   3 |    NESTED LOOPS               |          |      1 |     14 |00:00:00.01 |      11 |
|   4 |     TABLE ACCESS FULL         | EMP      |      1 |     14 |00:00:00.01 |       7 |
|*  5 |     INDEX UNIQUE SCAN         | PK_DEPT  |     14 |     14 |00:00:00.01 |       4 |
|   6 |    TABLE ACCESS BY INDEX ROWID| DEPT     |     14 |     14 |00:00:00.01 |      14 |
|*  7 |   TABLE ACCESS FULL           | SALGRADE |     12 |     12 |00:00:00.01 |      84 |
-------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1
   4 - SEL$1 / EMP@SEL$1
   5 - SEL$1 / DEPT@SEL$1
   6 - SEL$1 / DEPT@SEL$1
   7 - SEL$2 / SALGRADE@SEL$2

Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter( IS NULL)
   5 - access("DEPT"."DEPTNO"="EMP"."DEPTNO")
   7 - filter(("HISAL">=:B1 AND "LOSAL"<=:B2))
Note
-----
   - rule based optimizer used (consider using cbo)

--这里的fliter ID=1条件是1 - filter( IS NULL).如果理解这个条件,就很好理解filter( IS NOT NULL)

SELECT /*+ RULE to make sure it reproduces 100% */
      ename
      ,job
      ,sal
      ,dname
  FROM emp, dept
WHERE     dept.deptno = emp.deptno
       AND EXISTS
              (SELECT *
                 FROM salgrade
                WHERE emp.sal BETWEEN losal AND hisal);

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表