`
hotjava
  • 浏览: 178457 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

转:对oracle执行计划相关概念的理解

阅读更多

转自:http://blog.csdn.net/47522341/archive/2008/05/07/2410843.aspx

    驱动表(driving table)和被探查表(probed table)的概念
驱动表又称为外层表(outer table),这个概念用于嵌套与hash连接中,如果驱动表row source返回较多的行数据,则对所有的后续操作都有负面的影响,因为将大的row source作为驱动表时在后续的操作中返回的中间结果都比较大。这是比较容易理解的。
另外在驱动表的选择上,应该选择经限制条件选择之后结果集比较小的row source作为驱动表,而不是单纯选择原始数据较小的数据表作为driving table。
驱动表的识别,在执行计划那个,靠上的那个row source应该是驱动表,一般都是在from关键字后靠前位置的表。
    表之间的连接
目前为止,无论连接操作符如何,典型的连接类型有三种:
排序――合并连接(sort merge join(SMJ))
内部连接过程为:1,先生成驱动数据,然后对这些数据按照连接操作关联列进行排序;2,生成被探查数据,然后对这些数据按照连接操作关联列进行排序;3,对已经排序的两个结果放在一起执行合并操作。
排序是一个费时、费资源的操作,特别对于大表。基于这个原因,SMJ经常不是一个特别有效的连接方法,但是如果2个row source都已经预先排序,则这种连接方法的效率也是比较高的。
优点:1,对于非等值连接,效果较高,2,如果关联列上都有索引,效果更好;3,如果两个row source都比较大,本方法要稍好于NL;4,如果返回的row source过大则又会导致过多的IO。
嵌套循环(Nested loops NL
内部连接过程,是对驱动数据源的每一行数据去遍历被探查数据源。
一个习惯性的指导原则是利用较小的数据源作为驱动数据源,因为遵循这种原则时nl连接查询往往需要较少的IO次数,但也不尽然,有时又可能得到相反的结果,所以在判断时需要根据查询统计结果中实际执行的IO次数来判断该选择那个数据源作为驱动数据源。
习惯原则:如果驱动数据源较小,并且在被探查数据源上有唯一索引,或者有高选择性的非唯一索引时,使用这种方法可以得到较好的效率。
另外,NL连接方法的一个优点是:可以返回已经连接的行,而不必等待所有的连接操作处理完成之后才返回数据,这可以实现快速的响应时间。
优点:如果驱动数据源比较小,而且被探查数据源有唯一索引或者高选择性的非唯一索引,这种方法可以得到较好的效果;2,可以返回已经连接的行而不必等待所有的连接操作处理完才返回数据。
哈希连接(Hash Join,HJ
这种连接从理论上说比NL和SMJ更有效,而且只能在CBO优化器中。
较小的row source被用来构建hash table与bitmap,第二个row source被用来被hashed,并与第一个row source生成的hash table进行匹配,以便进行进一步的连接。Bitmap被用来作为一种比较快的查询方法,来检查在hash table中是否有匹配的行。
当hash table比较大而不能全部容纳在内存中时,这种方法特别有用,而当hash join和bitmap可以被容纳在内存中时这
种连接方式的效率极高。
需要设置hash_join_enabled=true和hash_area_size参数以使得hash连接高效运行。
优点:在两个较大的row source之间连接时会取得较好的效率,在一个row source较小时会取得更好的效率;2,只能用于等值连接。

 

分享到:
评论

相关推荐

    oracle执行计划详解

    oracle执行计划详解 本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。 并有总结和概述,便于理解与记忆!

    Oracle建表语句demo(建表语句、索引、序列)

    学习价值:对于初学者或者对Oracle数据库不熟悉的开发者来说,这是一个很好的实践教程,可以直接参照执行并理解相关概念。 实用性:通过实际操作案例,帮助读者理解如何根据业务需求设计合理的表结构,确保数据的...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    6.2.2 查看相关执行计划 149 6.2.3 收集执行计划统计信息 151 6.2.4 标识SQL语句以便以后取回计划 153 6.2.5 深入理解DBMS_XPLAN的细节 156 6.2.6 使用计划信息来解决问题 161 6.3 小结 169 第7章 高级分组 ...

    Oracle数据库学习指南

    27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高...

    Oracle数据库管理员技术指南

    执行计划和统计数据 8.6 优化回退段 8.6.1 最小化回退段争用 8.6.2 使动态扩充最小化 8.6.3 分布回退段的 I/O 8.7 优化索引 8.7.1 怎样确定和重建产生碎片的索引 8.7.2 怎样确定表的索引 8.8 优化磁盘 I/O ...

    ORACLE9i_优化设计与系统调整

    §7.3.1 Oracle系统有关目录所有文件的保护 94 §7.3.2 避免新用户使用默认system系统表空间 94 §7.4 Oracle系统所在服务器的独立性 94 第9章 项目分析、设计与管理 94 §9.1 项目分析要点考虑 95 §9.1.1 对应用...

    Oracle_Database_11g完全参考手册.part3/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    Oracle_Database_11g完全参考手册.part2/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    ORACLE11G宝典.rar 是光盘里面的内容,书太厚咧没法影印啊

    从基本原理、理论提高、实际操作、经验策略、应用开发等方面,结合命令行方式、开发工具的使用、管理工具的使用、Oracle与Windows之间的关系等知识点,按照学习、理解、应用、管理的需要全面描述了Oracle11g的特征和...

    oracle教程入门

    超级详细的oracle教程,适合于入门新手。...动手练习活动将帮助学员加强对关键概念的理解,同时学员们将获得机会来练习解决Oracle Worldwide Support经常遇到的问题,从而能够解决实际工作中的问题。

    Oracle数据库性能优化的艺术 (文平) 高清PDF扫描版

    第8章完整呈现了oracle数据库的表分区能力,是解决与大规模数据处理相关的性能问题的关键;第9章从索引和执行计划的角度讲解了数据库性能优化的方法;第10~12章着重介绍了在数据库系统部署并运行后,如何获得数据库...

    Oracle8i_9i数据库基础

    第一部分 Oracle SQL*PLUS基础 23 第一章 Oracle数据库基础 23 §1.1 理解关系数据库系统(RDBMS) 23 §1.1.1 关系模型 23 §1.1.2 Codd十二法则 24 §1.2 关系数据库系统(RDBMS)的组成 24 §1.2.1 RDBMS 内核 24...

    Oracl技术资料(EBook)

    27.如何对CLOB行字段执行全文检索 28.如何让你的SQL运行得更快 29.如何使‘CREATE TABLE AS SELECT’能支持ORDER BY 30.删除表内重复记录的方法 31.数据库安全性策略 32.数据库的查询优化技术. 33.提高C-S...

    2021语言与智能技术竞赛:机器阅读理解任务.zip

    多线程支持: Java内置了对多线程的支持,允许程序同时执行多个任务。这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过...

    2018百度机器阅读理解技术竞赛.zip

    多线程支持: Java内置了对多线程的支持,允许程序同时执行多个任务。这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过...

    Toad 使用快速入门

     非常容易对SQL语句的分析其执行计划:单击工具栏上的 按钮就可以看到Explain Plan的结果  支持部分SQL*Plus命令,可以方便的执行大量的为SQL*Plus编写的数据库脚本 可以通过SQLab xpert来对当前SQL语句...

Global site tag (gtag.js) - Google Analytics