查询语句的处理过程主要包含3个阶段:编译、执行、提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合)
一、编译parse
在进行编译时服务器进程会将sql语句的正文放入SGA的共享池的库高速缓存区(library cache)中并将完成一下处理。
1、首先在共享池中搜索是否有相同的sql语句(正文),如果没有就进行后续的处理。
2、检查sql语句的语法是否正确
3、通过查看数据字典来检查表和列的定义是否有效
4、对所操作的对象加编译锁,以便在编译语句期间这些对象的定义不能被改变。
5、检查所引用对象的用户权限
6、生成执行该sql语句所需的优化的执行计划
7、将sql语句和sql执行计划装入共享的sql区
以上每一步都是在处理正确时才进行的后续操作,如果不正确就返回错误。
二、执行execute
oracle服务器进程开始执行sql语句是因为他已经获得了执行sql语句的所需的全部资源和信息
三、提取数据fetch
oracle服务器进程选择所需要的数据行,并在需要时将其排序,最后将结果返回给用户进程。