当前位置:首页 > 开发 > 数据库 > 正文

oracle执行顺序

发表于: 2012-10-31   作者:blackproof   来源:转载   浏览次数:
摘要: 看了一篇oracle执行顺序滴,感觉挺好滴 转http://blog.csdn.net/wonth/article/details/1598446 1。分析 分析是处理SQL语句的第一步,它是SQL语句处理过程较为重要的一步,它又包含几个方面: (1)语法分析,oracel是采用数据库常用的自底向上的分析方法,包含检查语法规范,命名规范,它是处理SQL语句中最消耗时间且代价最高的步骤

看了一篇oracle执行顺序滴,感觉挺好滴

http://blog.csdn.net/wonth/article/details/1598446

1。分析

分析是处理SQL语句的第一步,它是SQL语句处理过程较为重要的一步,它又包含几个方面:

(1)语法分析,oracel是采用数据库常用的自底向上的分析方法,包含检查语法规范,命名规范,它是处理SQL语句中最消耗时间且代价最高的步骤,主要表现在绑定变量和存储过程等方面:

A.绑定变量:这也是为什么使用在某种情况下绑定变量方式会比非绑定方式效率和性能高出几倍,主要是绑定变量只会编译一次,随后就会把查询计划存储在一个共享池里,以便以后获取和重用这个查询计划。

B.存储过程:存储过程比一般的SQL语句要快,就是它不用再次编译,而且还可以利用数据库里许多特性,使得它的速度会比一般SQL语句快很多

(2)语义分析,学过编译原理的都知道,这一步是非常重要的,ORACLE主要是分析SQL语句格式是否正确,各个对象是否存在,以及它是否有足够的权限执行

(3)视图转换,它会将涉及的视图的查询语句转换为较为简单的等效连接表达式,有些人认为视图一定执行速度会比使用表要快,其实不一定的,主要具体情况具体分析,只要把这篇文章真正理解,自己分析是不困难的;

(4)表达式转换。将复杂的SQL表达式转换为相应的对基表的查询语句。写SQL的标准

A.不要再WHERE字句中进行计算,如SELECT AT_ID FROM ARTICLE WHERE AT_ID >10*10000 AND AT_ID<(10+1)*10000是不允许的就是这个原理

B.注意数据类型的匹配

SELECT BK_ID FROM BOOK WHERE BK_PRICE>30 就比不上SELECT BK_ID FROM BOOK WHERE BK_PRICE>30.00好啦

(5)选择优化器,学过编译原理时候就知道,使用不用的优化器是会有不同的执行效率,当然,最好是能根据批量的SQL自己编一个特定的优化器

(6)选择连接方式。INFORMIX就有简单的归并连接 和排序-归并连接技术之分,主要看是否使用索引的问题。

(7)选择连接顺序。多表连接,oracle选择那一个对表先连接,并选择源数据表

(8)选择数据搜索路径,根据以上条件选择合适的数据搜苏路径,如选用全表搜索还是利用索引或是其他方式搜索

(9)到SQL中为该SQL语句找到一个共享SQL区,如已经有共享SQL区,则直接执行共享区内容。

2。执行

   主要在于使用UPDATE和DELETE语句时,必须将行锁定,以免其他用户修改。ORACLE先从数据库缓冲区中寻找是否存在所要的数据块,如果存在,就直接读或修改,否则从物理文件中读到数据库缓冲区中。

3。返回结果

   对SELECT 语句需要返回结果的语句,首先看是否需要排序,需要,则排序后返回给用户,然后根据内存的大小不同,可以一次取出一行数据,一可以一次取一组数据。这时,可能要用到数据结构中的外部排序,并归排序等算法,所以如内存允许的话,尽量大会提高性能的;

      最后总结一下经用使用的SELECT的处理步骤:

                                      打开游标
                                           |
   ---------查看共享SQL区,是否有相同的SQL语句
   |                                       |
   |                                   分析
   |                                       |
   |                                    定义
  ------------------------         |
                                           |
   ------------------------- 绑定变量
   |                                      |
   |                                   捆绑
   --------------- -----------   |
                                          |
                                  并行处理
                                         |
                                 执行查询
                                         |
                                   返回结果
                                         |
                                  关闭游标

 

oracle执行顺序

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
表f_jouranl 表中数据大约5万条,表f_history中数据大约有1万条,不同的执行过程显示不同的结果: 1
1.sql关键字 查询中用到的关键词主要包含六个,并且他们的顺序依次为 select--from--where--group b
突然在网上看到一种说法,Oracle的WHERE条件执行顺序是自右向左的。 理由是,当ORACLE的WHERE条件中
我们先用一个小表来,来说明一下,oracle执行计划该注意哪些地方。 hr@ORCL> set autotrace trac
SQL语句的执行顺序才能继续,上网上查了一下相关的资料,现整理如下: 一、sql语句的执行步骤: 1)
Filter的执行顺序与实例 Filter介绍 Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进
package anni; public class EncodingFilter implements Filter { public void init(FilterConfig c
毕业了,这几天找工作,昨天看到雨松MOMO写了一篇关于unity函数执行顺序的博客,我没事做也试了一下
SQL不同于一般的程序代码,会按照一定的顺序进行执行,他的第一个执行始终从from开始执行,虽然Sele
我们先用一个小表来,来说明一下,Oracle执行计划该注意哪些地方。 hr@ORCL> set autotrace trac
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号