-
SQL
语句的执行过程
(SQL
Statement Execution)
图中概要的列出了处理和运行一个
sql
语句的需要各个重要阶段。在某些情况下,
Oracle
运
行
sql
的过程可能与下面列出的各个阶段的顺序有所不同。如
DEFINE
p>
阶段可能在
FETCH
阶段之前,这主要依
赖你如何书写代码。
对许多
oracle
的工具来说,
其中某些阶段会自
动执行。
绝大多数用户不需要关心各个阶段的
细节问题,然而,
知道执行的各个阶段还是有必要的,这会帮助你写出更高效的
SQL
语句
来,而且还可以让你猜测出性能差的
SQL
语句主要是由于哪一个阶段造成的,然后我们针
对这个具体的阶段,找出解
决的办法
本节给出一个例子来说明
在
DML
语句处理的各个阶段到底发生了什么事情。
假设你使用
Pro*
C
程序来为指定部门的所有职员增加工资。程序已经连到正确的用户,你
可以在你的程序中嵌入如下的
SQL
语句:
EXEC SQL
UPDA
TE employees
SET salary = 1.10 * salary
WHERE department_id =
:var_department_id;
var_dep
artment_id
是程序变量,里面包含部门号,我们要修改该部门的职员的工资。
当这个
SQL
语句执行时,使用该变量的值。
< br>
每种类型的语句都需要如下阶段:
?
第
1
步
:
Create a Cursor
创建游标
?
第
2
步
:
Parse the Statement
分析语句
?
第
5
步
:
Bind Any Variables
绑定变量
?
第
7
步
:
Run the Statement
运行语句
?
第
9
步
:
Close the Cursor
关闭游标
如果使用了并行功能,还会包含下面这个阶段:
?
第
6
步
:
Parallelize the Statement
并行执行语句
如果是查询语句,则需要以下几个额外的步骤,如图
3
所示:
?
第
3
步
:
Describe Results of a Query
描述查询的结果集
?
第
4
步
:
Define Output of a Query
定义查询的输出数据
?
第
8
步
:
Fetch Rows of a Query
取查询出来的行
第
1
步
:
创建游标
(Create a Cursor)
由程序接口调用创建一个游标(
cu
rsor
)
。任何
SQL
语句都会创建它,特别在运行
DML
语
句时,都是自动创建游标的,不需要开发人员干预。多数应用中,游标的创建是自动的。然
而,在预编译程序
(pro*c)
中游标的创建,
可能是隐含的,也可能显式的创建。在存储过程中
也是这样的。
第
2
步
p>
:
分析语句
(Parse the
Statement)
在语法分析期间,
< br>SQL
语句从用户进程传送到
Oracle
,
SQL
语句经语法分析后,
SQL
语句
本身与分析的信息都被装入到共享
SQL
区。在该阶段中,可以解决许多类型的错误。
语法分析分别执行下列操作:
翻译
SQL
语句,验证它是合法的语句,即书
写正确
实现数据字典的查找,以验证是否符合表和列的定义
在所要求
的对象上获取语法分析锁,使得在语句的语法分析过程中不改变这些对象的定
义
验证为存取所涉及的模式对象所需的权限是否满足
决定此语句最佳的执行计划
将它装入共享
SQL
区
对分布的语句来说,把语句的全部或
部分路由到包含所涉及数据的远程节点
以上任何一步出现错误,都将导致语句报错,中止执行。
只有在共享池中不存在等价
SQL<
/p>
语句的情况下,
才对
SQL
语句作语法分析。
在这种情况下,
数据库内核重新为
该语句分配新的共享
SQL
区,并对语句进行语法分析。进行语
法分析需
要耗费较多的资源,所以要尽量避免进行语法分析,这是优化的技巧之一。
p>
语法分析阶段包含了不管此语句将执行
多少次,
而只需分析一次的处理要求。
Oracle
只对每
个
SQL
语句翻译
一次,在以后再次执行该语句时,只要该语句还在共享
SQL
区
中,就可以
避免对该语句重新进行语法分析,
也就是此时可以直
接使用其对应的执行计划对数据进行存
取。这主要是通过绑定变量
(bind
variable)
实现的,也就是我们常说的
共享
SQL
,后面会给
出共享
SQL
的概念。
<
/p>
虽然语法分析验证了
SQL
语句的正确性
,
但语法分析只能识别在
SQL
语句执
行之前所能发
现的错误
(
如书写错误、
权限不足等
)
。因此,有些错误通过语法分析是抓不到的。例如
,在
数据转换中的错误或在数据中的错
(如企图在主键中插入重
复的值)
以及死锁等均是只有在
-
-
-
-
-
-
-
-
-
上一篇:3DEC-用户手册-概况翻译
下一篇:AD域管理优缺点