转自: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 执行计划的相关概念、访问数据的存取方法、表之间的连接等内容,并对总结和概述,以便于理解和记忆。 一、相关的概念 1. Rowid 概念:Rowid 是一个伪列,它不是用户定义的,而是系统自己给...
### Oracle执行计划分析 ...通过理解和掌握Oracle执行计划的相关概念和技术,可以显著提高SQL查询的性能。在实际工作中,应根据具体情况灵活运用各种技术和工具来优化查询计划,从而达到最佳的查询效果。
以下是一些关于Oracle执行计划的基本概念: 1. **Rowid**: Rowid是Oracle用来标识表中每行数据的唯一地址,它是一个伪列,虽然在表中不实际存储,但可以通过SQL查询访问。Rowid在行的生命周期内保持不变,即使行...
本文将深入探讨Oracle的执行计划和表分区两个重要概念,以及它们如何影响数据库性能。 执行计划是Oracle数据库处理SQL查询的一种步骤序列,它详细描述了数据如何从表中提取、如何进行排序或聚合,以及如何返回到...
除了以上概念,Oracle执行计划还包括其他访问方法,如索引扫描(Index Scan)、索引唯一扫描(Index Unique Scan)、索引快速全扫描(Index Fast Full Scan)以及各种类型的连接操作,如嵌套循环(Nested Loop)、...
《Oracle执行计划与SQL优化实例》这一主题深入探讨了数据库管理与优化的关键方面,尤其针对Oracle数据库环境。本文旨在解析并扩展此PPTX文件中提及的重要知识点,涵盖执行计划的概念、获取方法、解读技巧以及SQL优化...
在深入了解Oracle执行计划之前,我们先来了解一下几个重要的概念,这些概念对于理解执行计划至关重要。 **共享SQL语句**:为了提高性能并减少资源消耗,Oracle在第一次解析某个SQL语句后,会将其以及相应的执行计划...
Oracle执行计划是数据库执行SQL语句前确定的操作步骤序列。优化器根据表的统计信息、存储参数、可用的执行路径等生成执行计划,以实现最快的查询速度。执行计划通常用一系列数据库操作符来表示,这些操作符及其顺序...
SQL 语句性能调整 ORACLE 的执行计划 SQL 语句性能调整是 Oracle 数据库开发中非常重要的一部分,它...这些案例可以帮助开发者更好地理解 SQL 语句性能调整和 ORACLE 的执行计划,从而提高 SQL 语句的执行效率和性能。
【Oracle执行计划和SQL调优】是数据库管理中至关重要的环节,主要涉及到如何高效地运行SQL语句,提高数据库性能。下面将详细讲解执行计划的相关概念以及SQL调优的策略。 1. **Rowid的概念**:Rowid是Oracle数据库中...
总结,理解和分析Oracle的执行计划是SQL性能优化的基础。通过观察执行计划,我们可以识别潜在的性能问题,并采取相应的优化措施。在日常工作中,定期审查关键SQL的执行计划,有助于保持系统的高效运行。同时,要记得...
#### 四、Oracle执行计划访问路径 **4.1 表之间的连接** 在多表查询中,连接表的方式会直接影响执行计划: - **嵌套循环连接(Nested Loop Join)**:适用于小表与大表之间的连接。 - **哈希连接(Hash Join)**:...
Oracle数据库执行计划是数据库管理系统在处理SQL查询时所采用的一种策略,它决定了如何最有效地从数据库中检索数据。执行计划涉及到一系列的操作,包括数据的存取方法、索引的使用、连接操作以及优化器的选择。 ...
Oracle执行计划和SQL调优是数据库管理中至关重要的主题,主要涉及如何优化SQL查询以提高数据库性能。在Oracle数据库系统中,SQL语句的执行效率直接影响到整个应用程序的响应速度和资源消耗。以下是对相关概念的详细...
### Oracle的执行计划详解 #### 一、执行计划的概念 执行计划是指在Oracle数据库中执行SQL查询时所采用的数据访问路径。...通过对执行计划的理解,DBA和开发人员可以更有效地优化查询性能,减少不必要的资源消耗。
本文旨在详细介绍Oracle执行计划的基础概念、重要性及其查看方法,并通过一系列实用技巧帮助读者更好地解读与优化执行计划。 #### 二、理解执行计划 ##### 2.1 执行计划的重要性 执行计划是数据库管理系统为执行...
Oracle 执行计划是数据库管理系统为了高效执行SQL查询而设计的一种策略。它包含了数据库如何获取、处理和返回数据的详细步骤。理解执行计划对于优化查询性能至关重要,因为通过分析执行计划,我们可以识别出潜在的...
本文将深入解析Oracle执行计划的关键概念及其应用场景,帮助DBA和开发人员更好地理解和优化Oracle数据库性能。 #### 一、相关概念 1. **ROWID**:ROWID是Oracle数据库中的一个特殊伪列,它标识了表中每一行的唯一...