oracle 数据库是关系数据库,oracle用sql语言对数据库进行操作。了解sql语句的处理过程,能够更深入的了解oracle的内部运行机制。
1.1:sql语句的处理过程
oracle中,所有的sql语句都分3个阶段进行处理:分析,执行,返回结果。无论工具如何都要将语句传递到oracle进行处理。
1.2:SQL语句分析
分析是处理sql语句的第一步,sql语句从用户进程送到服务器进程,服务器进程进程开始进行以下工作。
>:语法分析
oracle采用自底向下的分析方法,检查语句是否符合语法规范,命名是否符合命名规范。如:SQL语句:select ename,sal from emp;
服务器进程会将其中的关键字select,from,表名emp,列名ename,sal分析出来等待语义分析。
>:语义分析
语法分析通过后,说明sql语句格式正常,但还不知道语句中的各个对象在数据中是否存在,当前用户是否有权限读写。语义的功能就是验证这些。它根据语法分析处理的哥数据库对象,分别从数据字典中取出其定义和权限。
如上例中的表名emp,先从数据字段中看是否存在该表,如果存在,就从数据字典中取出表emp的定义,查看当前用户是否有权限读,如果没有提示出错。
>:视图转换:将涉及视图的查询语句转换为相应的对基表的查询语句。
>:表达式转换:将复杂的sql表达式转换为较简单得等效连接表达式。
>: 选择优化器:不同的优化器一般产生不同的“执行计划”。
>: 选择连接方式:oracle有3种连接方式,对多表连接oracle可选择适当的连接方式。
>:选择连接顺序:多表连接,oracle选择那一对表先连接,并选择源数据表。
>:选择数据的搜索路径:根据以上条件选择合适的数据搜索路径,如选用全表搜索还是利用索引或是其他的方式搜索。
>:到SGA中为该sql语句找到一个共享sql区。
如果已有该sql语句的共享sql区,则直接执行共享sql区内容,而不进行以上分析。
1.3:sql语句执行
执行阶段执行已经分析过的语句。如果sql语句会更新数据库,如UPDATE,DELETE语句,oracle先要将修改的行锁住,以免其他用户修改。如果sql语句不会更新数据库,则执行下一步的读数据库操作。
oracle先从数据库缓冲区中寻找是否存在所要的数据块,如果存在,就直接读或修改;否则从物理文件中读到数据库缓冲区内。
1.4:返回结果
对select语句等需要返回结果的语句,还有返回结果阶段,将执行结果返回给用户进程。如果查询需要排序,则将排序的结果返回给用户。查询结果总是以表格形式呈现,根据使用的内存大小不同,可以一次取出一行,也可以一次取出一组数据。
1.5:SELECT语句的处理过程
select语句是数据库最常使用的命令,下图为其处理查询语句的具体步骤:
。创建游标(curson),游标可以是显式的,也可以是隐式的
。判断是否有相同sql语句
。分析语句
。定义输出,指定位置,类型和结果集的数据类型,转换数据类型
。绑定变量,如果查询语句中有变量值,需取到变量的值
。判断是否能并行查询
。执行查询
。以行方式取出数据
。关闭游标
1.6:其他语句的处理步骤
除select外得其他语句执行方式:
。创建游标(cursor),使用隐式游标
。判断是否有相同语句
。分析语句
。绑定变量,如果查询语句中有变量值,需取到变量的值
。看是否能并行查询
。执行语句
。通知用户执行完成
。关闭游标
阅读(1232) | 评论(0) | 转发(0) |