`
tylgl
  • 浏览: 56820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle数据库中的表连接方式及使用场合

阅读更多
表连接的方式及其使用场合:
NESTED LOOP

对于被连接的数据子集较小的情况,nested loop连接是个较好的选择。nested loop就是扫描一个表,每读到一条记录,就根据索引去另一个表里面查找,没有索引一般就不会是 nested loops。

一般在nested loop中, 驱动表满足条件结果集不大,被驱动表的连接字段要有索引,这样就走nested loop。如果驱动表返回记录太多,就不适合nested loops了。如果连接字段没有索引,则适合走hash join,因为不需要索引。

可用ordered提示来改变CBO默认的驱动表,可用USE_NL(table_name1 table_name2)提示来强制使用nested loop。

HASH JOIN

hash join是CBO 做大数据集连接时的常用方式。优化器扫描小表(或数据源),利用连接键(也就是根据连接字段计算hash 值)在内存中建立hash表,然后扫描大表,每读到一条记录就来探测hash表一次,找出与hash表匹配的行。

当小表可以全部放入内存中,其成本接近全表扫描两个表的成本之和。如果表很大不能完全放入内存,这时优化器会将它分割成若干不同的分区,不能放入内存的部分就把该分区写入磁盘的临时段,此时要有较大的临时段从而尽量提高I/O 的性能。临时段中的分区都需要换进内存做hash join。这时候成本接近于全表扫描小表+分区数*全表扫描大表的代价和。

至于两个表都进行分区,其好处是可以使用parallel query,就是多个进程同时对不同的分区进行join,然后再合并。但是复杂。

使用hash join时,HASH_AREA_SIZE初始化参数必须足够的大,如果是9i,Oracle建议使用SQL工作区自动管理,设置WORKAREA_SIZE_POLICY 为AUTO,然后调整PGA_AGGREGATE_TARGET即可。

以下条件下hash join可能有优势:

两个巨大的表之间的连接。

在一个巨大的表和一个小表之间的连接。

可用ordered提示来改变CBO默认的驱动表,可用USE_HASH(table_name1 table_name2)提示来强制使用hash join。

SORT MERGE JOIN

sort merge join的操作通常分三步:对连接的每个表做table access full;对table access full的结果进行排序;进行merge join对排序结果进行合并。sort merge join性能开销几乎都在前两步。一般是在没有索引的情况下,9i开始已经很少出现了,因为其排序成本高,大多为hash join替代了。

通常情况下hash join的效果都比sort merge join要好,然而如果行源已经被排过序,在执行sort merge join时不需要再排序了,这时sort merge join的性能会优于hash join。

在全表扫描比索引范围扫描再通过rowid进行表访问更可取的情况下,sort merge join会比nested loops性能更佳。

可用USE_MERGE(table_name1 table_name2)提示强制使用sort merge join。
分享到:
评论

相关推荐

    Oracle数据库3种主要表连接方式对比

    在Oracle数据库中,为了获取来自多个表的数据,我们需要使用不同的连接方式来实现这一目的。本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,...

    数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf

    本文将深入探讨Oracle数据库SQL开发中的多表连接技术,解析其核心概念、类型及应用场景。 ### 多表连接的目的与重要性 多表连接是指在SQL查询中,通过特定的条件将两个或多个表中的数据行进行关联,从而获取包含多...

    oracle表的连接方式

    了解和掌握Oracle数据库中的不同表连接方式,可以帮助DBA和开发人员做出更明智的决策,以优化查询性能。NESTED LOOP JOIN适用于小型数据集,HASH JOIN适用于大数据集,而SORT MERGE JOIN则在数据预排序时表现出色。...

    VC 中连接Oracle数据库的几种方法.pdf

    在VC++环境中,连接Oracle数据库通常有三种方法:ActiveX数据对象(ADO)、Oracle Call Interface(OCI)和Pro*C/C++。每种方法都有其特定的优缺点和适用场景。 1. ADO (ActiveX Data Objects) 连接: ADO是Microsoft...

    Oracle免安装客户端的安装包

    Oracle免安装客户端,也被称为Instant Client,是Oracle公司提供的一种轻量级的数据库连接工具,无需完整安装Oracle数据库服务器即可使用。它包含了连接到Oracle数据库所需的基本组件,如OCI(Oracle Call Interface...

    Unix下基于OCI的Oracle数据库的访问.pdf

    综上所述,文件《Unix下基于OCI的Oracle数据库的访问.pdf》系统地介绍了在Unix环境下如何使用OCI接口与Oracle数据库交互的详细步骤和方法,同时对OCI接口进行了深入的分析和封装说明,以及与其他访问方式的比较。...

    ArcSDE for Oracle,Arcgis server数据库中间件

    安装过程中,通常需要设置ArcGIS Server和Oracle数据库的连接参数,配置数据库模式,创建必要的系统表和索引,以及设置用户权限。安装完成后,ArcGIS Server可以通过ArcSDE接口直接存取Oracle 11g中的空间数据,提供...

    Oracle10g数据库的搭建及维护分析.pptx

    "Oracle10g数据库的搭建及维护分析" 数据库环境介绍: Oracle10g数据库是一个关系型数据库管理系统,具有高性能、安全性强、可扩展性好等特点。搭建一个Oracle10g数据库实例需要在一台主机上安装Oracle服务器版,...

    ORACL_exp.exe oracl数据库

    标题中的"ORACL_exp.exe"指的是Oracle数据库的导出工具,即`exp.exe`,它是Oracle Database早期版本中用于导出数据库对象的数据和结构的命令行实用程序。这个工具允许用户将数据库的一部分或全部导出到一个二进制的...

    VB6.0连接MySQL数据库

    接着,可以使用以下VB6.0代码片段来建立数据库连接: ```vb Dim conn As ADODB.Connection Set conn = New ADODB.Connection conn.ConnectionString = "DSN=你的DSN名称;UID=用户名;PWD=密码" conn.Open ``` 这段...

    WinServer(连接数据库)

    7. **Web服务和API**:在分布式系统中,数据库连接常通过Web服务(如RESTful API)进行。Windows Server可以作为Web服务器部署API,供其他系统调用,间接实现数据库的跨平台访问。 8. **数据库连接池**:为了优化...

    Oracle9i第2章 数据库的创建.pptx

    在Oracle数据库管理中,创建一个新的数据库是至关重要的步骤,尤其在Oracle 9i版本中,这一过程更加规范化和灵活。本章将详细讲解如何创建Oracle数据库,主要关注两种方法:使用数据库配置助手(DBCA)和手工编写脚本...

    Oracle精简客户端驱动

    1. **Oracle Net Services**:也称为Oracle网络服务或TNS(Transparent Network Substrate),是Oracle数据库连接的基础。它提供了多种网络协议和连接方式,如TCP/IP、 Named Pipes等,使得客户端可以透明地访问远程...

    数据库表结构生成word工具.rar

    7. **工具的使用**:这类工具通常会要求用户提供数据库连接信息(如服务器地址、用户名、密码、数据库名),然后自动扫描并解析数据库的表结构,将其转换为预设的Word模板。用户可以根据需要自定义输出的样式和内容...

    数据库结构转成CHM文档

    描述中的"支持SQL2005及以上 Oracle"指出,该工具至少兼容两种常见的关系型数据库管理系统:SQL Server 2005及其更高版本以及Oracle。SQL Server 2005是一个重要的里程碑,引入了许多新特性,如集成服务、资源管理器...

    Oracle客户端时使用

    Oracle数据库作为一款功能强大的数据库管理系统,广泛应用于大型信息系统开发中。使用PL/SQL Developer作为其客户端工具,开发人员可以便捷地编写SQL语句、调试存储过程等。然而,传统的Oracle客户端或服务器安装...

    结合实例深入讲解oracle中的直方图histogram

    在Oracle数据库中,直方图主要用于帮助优化器了解表中数据的分布情况,特别是对于那些具有显著数据偏斜性的列。通过这些信息,优化器可以更准确地估算出查询的成本,从而选择更优的执行计划。例如,当WHERE子句中的...

    基于Oracle和Arcsde分布式空间数据库的设计与建立.pdf

    - ArcSDE配置:安装并配置ArcSDE服务,建立与Oracle数据库的连接。 - 数据加载:将预处理后的空间数据通过ArcSDE导入Oracle数据库。 - 应用程序开发:利用前端开发工具创建用户界面,通过ArcSDE API实现数据查询、...

Global site tag (gtag.js) - Google Analytics