你所在的位置: 首页 > Oracle > OCA >
最新开班 班级 报名状态
9月16日 HCNP-R&S(含初级) 热招中
9月18日 RHCSA脱产班 热招中
9月25日 HCNA-Cloud Service 热招中
9月25日 HCNA-Cloud Service 热招中
9月30日 HCNA-R&S周末班 热招中
10月31日 HCNP-storage脱产班 热招中
10月23日 HCNA-storage脱产班 热招中
10月20日 HCNP-R&S脱产班 热招中
10月10日 HCIE-R&S脱产班 热招中
10月9日 HCNA-R&S脱产班 热招中
  • 博赛网络ICT就业班热招中
  • 博赛推出Oracle OCM实战课程

ORACLE数据库SQL语句的执行过程(1)

时间:2013-11-02 15:32 作者:Superthink 点击:

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_TEXT

  2 FROM V$SQL

  3 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 =20

  4215405494 27EEA3BC 1 SELECT * FROM SCOTT.DEPT WHERE DEPTNO =10

  下面我们先清空共享池缓存的执行计划,然后使用绑定变量,查看执行计划的变换

  SQL> ALTER SYSTEM FLUSH SHARED_POOL;

  System altered

  SQL> VARIABLE deptno NUMBER;

  SQL> EXECUTE :deptno := 10;

  PL/SQL procedure successfully completed

  deptno

  ---------

  10

  SQL> SELECT * FROM SCOTT.DEPT WHERE DEPTNO=:deptno;

  DEPTNO DNAME LOC

  ------ -------------- -------------

  10 ACCOUNTING NEW YORK

  SQL> EXECUTE :deptno :=20;

  PL/SQL procedure successfully completed

  deptno

  ---------

  20

  SQL> SELECT * FROM SCOTT.DEPT WHERE DEPTNO=:deptno;

(责任编辑:Superthink)

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)