日期:2013-04-22  浏览次数:20482 次

07年开始,换了一家公司,数据库使用的是ORACLE10G,以前不断使用的是INFORMIX和MSSERVER,感觉ORACLE功用还真强大,比Informi和msserver都好用多啦,体系结构和管理方式都有了许多变化,但使用两个月下来,其实数据库的基本原理是一样的,现结合以前的任务经验和学习的材料,总结ORACLE数据库的一些知识,今天先写Oracle SQL语句处理过程:

           普通来说,数据库处理SQL都会经过三个过程:分析、执行、前往结果,比如COGNOS ReportNet通过拖放式完成表现层后,还是会自动生成SQL,然后将SQL传递到ORACLE进行处理。

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语句
   |                                       |
   |                                   分析
   |                                       |
   |                                    定义
  ------------------------         |
                                           |
   ------------------------- 绑定变量
   |