SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在Oracle数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQL语句,如果是SELECT语句,服务器进程还需要将执行结果回传给用户进程。SQL语句的执行过程一般如下:
解析(PARSE)—— 绑定(BIND)——执行(EXECUTE)——提取(FETCH 只有SELECT才需要这步) 解析 服务器进程接收到一个SQL语句时,首先要将其转换成执行这个SQL语句的最有效步骤,这些步骤被称为执行计划。Step 1:检查共享池中是否有之前解析相同的SQL语句后所存储的SQL文本、解析树和执行计划。如果能从共享池的缓存库中找到之前解析过生成的执行计划,则SQL语句则不需要再次解析,便可以直接由库缓存得到之前所产生的执行计划,从而直接跳到绑定或执行阶段,这种解析称作软解析。但是如果在共享池的库缓存中找不到对应的执行计划,则必须继续解析SQL、生成执行计划,这种解析称作硬解析在缓存池解析过的SQL,会有一个对应的哈希值与之对应,你可以通过V$SQL视图来查询,请看下面一个例子: SQL>SELECT * FROM SCOTT.DEPT WHERE DEPTNO =10;SQL>SELECT * FROM SCOTT.DEPT WHERE DEPTNO =20;SQL> SELECT HASH_VALUE , ADDRESS, EXECUTIONS ,SQL_TEXT2 FROM V$SQL3 WHERE SQL_TEXT LIKE "SELECT * FROM SCOTT.DEPT WHERE DEPTNO%"4 ;HASH_VALUE ADDRESS EXECUTIONS SQL_TEXT---------- -------- ---------- --------------------------------------------------------------------------------442836625 27EE4B7C 1 SELECT * FROM SCOTT.DEPT WHERE DEPTNO =204215405494 27EEA3BC 1 SELECT * FROM SCOTT.DEPT WHERE DEPTNO =10 下面我们先清空共享池缓存的执行计划,然后使用绑定变量,查看执行计划的变换 SQL> ALTER SYSTEM FLUSH SHARED_POOL;System alteredSQL> VARIABLE deptno NUMBER;SQL> EXECUTE :deptno := 10;PL/SQL procedure successfully completeddeptno---------10SQL> SELECT * FROM SCOTT.DEPT WHERE DEPTNO=:deptno;DEPTNO DNAME LOC------ -------------- -------------10 ACCOUNTING NEW YORKSQL> EXECUTE :deptno :=20;PL/SQL procedure successfully completeddeptno---------20SQL> SELECT * FROM SCOTT.DEPT WHERE DEPTNO=:deptno;DEPTNO DNAME LOC------ -------------- -------------20 RESEARCH DALLASSQL> SELECT HASH_VALUE , ADDRESS, EXECUTIONS ,SQL_TEXT2 FROM V$SQL3 WHERE SQL_TEXT LIKE " SELECT * FROM SCOTT.DEPT WHERE DEPTNO%";HASH_VALUE ADDRESS EXECUTIONS SQL_TEXT---------- -------- ---------- --------------------------------------------------------------------------------3669302979 27D2BA1C 2 SELECT * FROM SCOTT.DEPT WHERE DEPTNO=:deptno
Step 2:语法分析,分析SQL语句的语法是否符合规范,衡量语句中各表达式的意义
Step 3:检查是否存在语义错误和权限。语义分析,检查语句中设计的所有数据库对象是否存在,且用户有相应的权限。
Step 4:视图转换和表达式转换 将涉及视图的查询语句转换为相应的对基表查询语句。将复杂表达式转化较为简单的等效连接表达式。
Step 5:决定最佳执行计划。优化器会生成多个执行计划,在按统计信息带入,找出执行成本最小的执行计划,作为执行此SQL语句的执行计划
Step 6:将SQL文本、解析树、执行计划缓存到库缓存,存放地址以及SQL语句的哈希值。
更多详情请继续阅读第2页的内容:http://www.linuxidc.com/Linux/2013-10/91325p2.htm
Oracle体系结构系列相关文章:Oracle体系结构之SCN、实例恢复 http://www.linuxidc.com/Linux/2013-09/90107.htmOracle体系结构之检查点 http://www.linuxidc.com/Linux/2013-09/90108.htmOracle体系结构之SQL语句的执行过程 http://www.linuxidc.com/Linux/2013-09/90109.htm
Linux下Oracle启动dbstart出错或无反应的解决办法及自启动Oracle DB 执行表空间时间点恢复相关资讯 Oracle SQL语句
- Oracle SQL语句追踪 (05/09/2015 09:42:25)
- Oracle执行SQL查询语句的步骤 (09/26/2014 19:40:59)
- Oracle和SQL Server在SQL语句上的 (07/26/2013 10:14:27)
| - 最权威Oracle获取SQL语句执行计划 (05/07/2015 19:22:48)
- Oracle体系结构之SQL语句的执行过 (09/15/2013 07:16:35)
- 使用优化器性能视图获取SQL语句执 (05/20/2013 08:29:53)
|
本文评论 查看全部评论 (0)