Oracle 10.2.0.4
在网络上看到SQL解析的过程如下,其他过程都了解, 其中 逻辑优化 部分不是太清楚如何运作的,
生成的语法语义上等同的新的SQL语句是什么样子的 ? 难道是类似将SQL中的同义词转化为对应的
具体的table信息或其他实际的 object 等过程 ?
(1) 包含VPD的约束条件
(2) 语法,语义以及访问权限的检查
(3) 将父游标保存到库缓存
只要不存在共享的父游标,就会在库缓存中分配一些内存,并将新产生的父游标保存进去。
与父游标有关的关键信息就是这个sql语句的文本。
(4) 逻辑优化 -- 用一定的转换技巧,生成语法语义上等同的新的sql语句。
(5)物理优化 -- 首先,生成与每个逻辑优化产生的sql语句有关的执行计划,接着。根据数据字典找到相关的统计信息或者动态收集
的统计信息,计算出一个与执行计划相关的开销。最后,选中最低开销的执行计划。简单来说,查询优化器通过探索搜索空间来寻找最有效的
执行计划
(6) 将子游标保存到库缓存 -- 首先分配内存,然后将共享子游标存储进去,最后将它与父游标关联,与子游标有关的关键
内容是执行计划和执行环境,一旦保存到库缓存,父游标与子游标就可以分别通过视图v$sqlarea和v$sql被具体化。
如果是这样的,那么上面的1~6 的顺序,和韩思捷的 <<教你如何称为10g OCP>>中第五章的硬解析的步骤顺序不一样。
其中 :
1. 检查文法, 若有问题,退出解析
2. 检查对象和列是否存在, 若有问题,退出解析
3. 将对象进行名称转换,比如同义词转换为实际的对象, 若有问题,退出解析
4. 检查对象的权限 , 若有问题,退出解析
.......