优化器的查询转换
2016-02-03 13:14 abce 阅读(238) 评论(0) 编辑 收藏 举报1.视图合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | SQL> create view emp_vm as 2 select empno,ename,job,sal,comm,deptno 3 from emp 4 where deptno=30; View created. SQL> select empno 2 from emp_vm 3 where empno > 150; EMPNO ---------- 7499 7521 7654 7698 7844 7900 6 rows selected. SQL> select * from table (dbms_xplan.display_cursor( null , null , 'advanced' )); PLAN_TABLE_OUTPUT ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ SQL_ID 997u1v1b1k5sc, child number 0 ------------------------------------- select empno from emp_vm where empno > 150 Plan hash value: 169057108 -------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 2 (100)| | |* 1 | TABLE ACCESS BY INDEX ROWID| EMP | 5 | 35 | 2 (0)| 00:00:01 | |* 2 | INDEX RANGE SCAN | PK_EMP | 14 | | 1 (0)| 00:00:01 | -------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$F5BB74E1 / EMP@SEL$2 2 - SEL$F5BB74E1 / EMP@SEL$2 Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('11.2.0.4') DB_VERSION('11.2.0.4') ALL_ROWS OUTLINE_LEAF(@"SEL$F5BB74E1") MERGE(@"SEL$2") OUTLINE(@"SEL$1") OUTLINE(@"SEL$2") INDEX_RS_ASC(@"SEL$F5BB74E1" "EMP"@"SEL$2" ("EMP"."EMPNO")) END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter( "DEPTNO" =30) 2 - access( "EMPNO" >150) Column Projection Information (identified by operation id): ----------------------------------------------------------- 1 - "EMPNO" [NUMBER,22] 2 - "EMP" .ROWID[ROWID,10], "EMPNO" [NUMBER,22] 49 rows selected. SQL> |
2.谓词推进
优化器将查询块的相关的谓词推进到视图查询块。
a.定义一个视图
1 2 3 4 | create view all_emp_vw as ( select empno, ename, job, comm, deptno from emp ) union ( select empno, ename, job, comm, deptno from contract_workers ); |
b.执行查询
1 2 3 | select ename from all_emp_vw where empno = 50; |
c.谓词推进(优化器真正执行的sql)
1 2 3 4 | select ename from ( select empno, ename, job, comm, deptno from emp where empno=50 union select empno, ename, job, comm, deptno from contract_workers where empno=50 ); |
3.非嵌套子查询:将子查询转换成等价的join连接
4.使用物化视图进行查询重写
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)