ORACLE数据库SQL语句的执行过程
作者:网络转载 发布时间:[ 2013/12/6 11:20:23 ] 推荐标签:
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
FROM V$SQL
WHERE SQL_TEXT LIKE 'SELECT * FROM SCOTT.DEPT WHERE DEPTNO%'
;
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;
DEPTNO DNAME LOC
------ -------------- -------------
20 RESEARCH DALLAS
SQL> SELECT HASH_VALUE , ADDRESS, EXECUTIONS ,SQL_TEXT
2 FROM V$SQL
3 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
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
oracle数据库碎片化管理oracle数据库死锁处理步骤怎么实现Oracle数据库分区表Oracle数据库CPU使用率过高处理记录如何定位Oracle数据库被锁阻塞会话的根源?怎样实现Java与oracle数据库的连接linux操作Oracle数据库和jboss服务器Oracle数据库的基础使用Oracle数据库(触发器、存储过程、函数、包)关闭ORACLE数据库详解参考Oracle数据库程序包全局变量的应用从淘汰Oracle数据库的事情说起Oracle数据库语言?结构化查询语言SQL用JDBC访问ORACLE数据库 关于commit 增快效率 大数据 等的整理设置TimesTen与Oracle数据库的连通性不用安装Oracle客户端,远程连接Oracle数据库

sales@spasvo.com