ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL语句的4个阶段

SQL语句的4个阶段

原创 Linux操作系统 作者:zhanglei_itput 时间:2009-07-22 12:16:17 0 删除 编辑

 

一个完成的SQL语句,从发出到最后返回记录集,一共经历4个阶段:

解析:这个阶段要进行语义和语法分析、权限检查, 内容包括语句是否拼写正确、数据库对象是否存在、用户是否有
            对象的访问权限,这些检查通过后,进入到下一个阶段;

优化:这一阶段是根据对象的统计信息,数据的优化器模式(CBO/RBO)来确定最佳访问路径;

产生执行计划:这一阶段根据上一阶段产生的访问路径,生成最终的执行计划;

产生结果:依据上一步的执行计划,访问数据,产生结果集,返回给用户;

    备注:SQL性能调整的方法:

                1.  减少解析
                     使用绑定变量,如果语句经过1,2,3步叫硬解析,如果使用了绑定变量,就省去了第2,3步,这种叫做软解析。
                2. 访问路径
                     (1) 单表访问:index和全表扫描的比较
                             当要访问的记录数和总记录数比值<0.1%,则index访问才有意义;
                             当结果集和记录总数的比值>20%,一定要使用全表扫描。
                             当结果集和记录总数的比值在0.1%~20%之间,自行取舍。

                      (2) 多表连接
                             (A) NEST LOOP:  选择一个数据量较少的表作为驱动表,然后拿驱动表的每一条记录去和另外一张表的所有记录做一次遍历,取出符合where条件的记录。
                                            特点: 返回第一条记录的速度非常快,不需要排序,可以用作非等值连接。

                             (B) SORT MERGE:对每个表进行排序,然后连个排序集进行一次遍历,取出记录集。
                                               特点: 每个表都要排序,排序后两个表都只需要做一次遍历。

                             (C) HASH JOIN: 准备阶段: 驱动表的连接字段进行HASH操作,产生一系列的HASH BUCKET;
                                                     探测阶段: 被驱动表的连接字段,执行相同的HASH函数,根据结果到驱动表的HASH同种检查。

                         多表连接的3中连接方式的比较:
                         HASH JOIN算法要优于SORT MERGE算法,HASH JOIN 很类似NEST LOOP,但是由于NEST LOOP,因为HASH table是构建在PGA中的,对他的访问不需要LATCH等机制的共享保护。
                         HASH JOIN > NEST LOOP > SORT MERGE

参考文献:

《大话ORACLE RAC》第14章-性能与RAC

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9252210/viewspace-609898/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-02-10

  • 博文量
    400
  • 访问量
    1108248