文档详情

SQL语句处理的详细过程.ppt

发布:2016-08-03约4.55千字共30页下载文档
文本预览下载声明
* * 举例: 举例: 举例: * * * SQL语句处理的详细过程 李鑫 目录 为什么要了解SQL语句处理的详细过程 SQL语句处理的详细过程 SQL语句的执行计划 统计信息如何影响SQL执行计划 为什么要了解SQL语句处理的详细过程 解决SQL语句的性能问题 在开发程序开始就以最优的方式编写SQL,以后的性能问题 或许可以感受到一些先进的设计思想 基础概念 游标 Oracle中包含SQL语句文本及相关运行信息的对象 共享池(Shared_pool) Library Cache Dictionary Cache 数据字典表 SQL语句处理的详细过程 语法检查 语义检查 访问权限检查 将父游标保存到库缓存 优化(最耗资源的步骤) 将子游标保存到库缓存 执行语句,获取数据 SQL语句处理的详细过程 硬解析 执行所有步骤1~6 软解析 执行其中部分步骤,跳过最耗资源的优化步骤 SQL语句处理的详细过程 如何减少硬解析? 绑定变量!!! select * from test where id = 1 select * from test where id =:v 案例 bind_var.sql SQL语句处理的详细过程 绑定变量也不是任何时候都好用!!! 案例 bind_peeking.sql SQL语句的执行计划 访问路径 FULL SCAN ROWID ACCESS INDEX SCAN SQL语句的执行计划 为什么有时候使用索引快? 为什么有时候全表扫描快? SQL语句的执行计划 SQL语句的执行计划 连接方式 Nested Loop Join Sort merge Join Hash Join SQL语句的执行计划 -- Nested Loops T1 T2 SQL语句的执行计划 -- Nested Loops scott@ORA920 select ename, dname 2 from emp, dept 3 where emp.deptno = dept.deptno 4 / Execution Plan Code View: Scroll / Show All ----------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=1909 Bytes=55361) 1 0 NESTED LOOPS (Cost=4 Card=1909 Bytes=55361) 2 1 TABLE ACCESS (FULL) OF EMP (Cost=2 Card=14 Bytes=98) 3 1 TABLE ACCESS (BY INDEX ROWID) OF DEPT (Cost=2 Card=136 Bytes=2992) 4 3 INDEX (UNIQUE SCAN) OF DEPT_PK (UNIQUE) SQL语句的执行计划 -- Sort Merge Table 1 Sort Table 2 Sort Merge Merge SQL语句的执行计划 -- Sort Merge select a.ename, b.ename, a.hiredate, b.hiredate from emp a, emp b where a.hiredate = b.hiredate; ----------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ----------------------------------------------------------------- | 0 | SELECT STATEMENT | | 7 | 224 | 8 (25)| | 1 | MERGE JOIN | | 7 | 224 | 8 (25)| | 2 | SORT JOIN |
显示全部
相似文档