免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3157 | 回复: 9
打印 上一主题 下一主题

ORACLE中SQL语句的解析过程(建议加精) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-04 15:00 |只看该作者 |倒序浏览
ORACLE中SQL语句的解析过程(建议加精)


1、接收到SQL语句后,将其转换成ASCII等效数字码;
——基本不耗时。
2、将ASCII等效数字码传递给一个散列(hash)算法,由该散列算法产生一个单独的散列(值);
——哈希算法,整数运算,耗时极小。
3、搜索当前用户session缓存(在PGA中)中,是否存在相同散列(值)的版本,如果存在,就直接执行该语句。这就是fast parse。
——整数匹配,耗时极小,PGA才多大点儿呀。
4、如果在PGA中没有命中,查找其他的session中是否有相同的散列(值),这就需要到共享池的库缓存中对查找。如果在库缓存中找到相同的散列(值),也就是 Library 中 Hit 成功。这就是soft parse。
——整数匹配,猜测是B树查找(即使纯列表线性查找也极快)。
5、若在3和4中都没有找到相同散列值,用户进程进行语法检查过程(Syntax Check)。语法检查主要是检查语法是否符合SQL Reference Manual 中给出的 SQL 语法。
——其实1-4动作都特别快,整数运算或查找而已。这步会很慢,慢的原因可以回忆一下《编译原理》的前面部分。
6、语法检查通过后,再进行语义分析过程(Semantic Analysis)。这个过程检查对象的合法性。比方说是检查表是否存在,列是否存在,是否有权限访问等。
7、选择执行计划。准备从可用的执行计划中选择一个执行计划,其中包括存储大纲(srored outline)或物化视图(materialized view)相关的决定。
8、这一步才真正“编译”生成该语句的一个伪代码(p-code)。1-8的整个步骤就是hard parse。

注:
——理论上讲,Fast parse 也算是一种 Soft parse。
——这里仅讨论解析过程,未考虑数据命中的情况,例如表信息是否在内存(字典)中,表内容是否在内存(db_cache)中……

评分

参与人数 1可用积分 +5 收起 理由
doni + 5 这个不算复杂,但能讲清楚的人也不多

查看全部评分

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2009-12-04 15:15 |只看该作者
这样也能加精???????

论坛徽章:
0
3 [报告]
发表于 2009-12-05 00:08 |只看该作者

回复 #2 renxiao2003 的帖子

——自荐而已,无所谓的。

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
4 [报告]
发表于 2009-12-05 09:52 |只看该作者
一般来说比较难吧。我那几篇精华都是04年的帖子。后来发的帖子就少了。

论坛徽章:
0
5 [报告]
发表于 2009-12-05 12:59 |只看该作者
原帖由 renxiao2003 于 2009-12-4 15:15 发表
这样也能加精???????


给个小手吧

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
6 [报告]
发表于 2009-12-05 22:57 |只看该作者
晕,还有自己给自己的帖子推荐加精的

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-04-28 14:27:11
7 [报告]
发表于 2009-12-07 19:09 |只看该作者
老毛自荐了,千里马找上门来了,伯乐不见了....

论坛徽章:
0
8 [报告]
发表于 2009-12-07 19:13 |只看该作者
书上写的比他说的全面

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
9 [报告]
发表于 2009-12-07 20:22 |只看该作者
原帖由 ghostgorst 于 2009-12-7 19:13 发表
书上写的比他说的全面


他做的是总结:-)

论坛徽章:
0
10 [报告]
发表于 2009-12-09 23:10 |只看该作者
学习一下,之前看oracle体系架构知道sql语句在解析之前会先进共享池去看看有没相同的语句,有就直接执行,没有才进行编译,不过没有这个详细:)~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP