- 浏览: 56820 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
最新评论
-
yvonxiao:
这个的确好用,我记得我以前是自己写了个存储过程来解决这种递归问 ...
Oracle Start With Connect By
表连接的方式及其使用场合:
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。
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 命令
2009-02-05 20:30 1011一、ORACLE的启动和关闭 ... -
通过dbms_flashback找回误删除的数据收藏
2009-01-21 11:35 1346在使用DBMS_FLASHBACK时要首先注意以下几个事项: ... -
优化Oracle数据库性能收藏
2009-01-21 11:35 890优化策略 为了保 ... -
Oracle Start With Connect By
2009-01-21 11:33 1572Start With Connect By 是用来实现在一个 ... -
Oracle 表空间操作收藏
2009-01-21 11:32 1009创建表空间: 1、递增 ... -
移动数据文件收藏
2009-01-21 11:32 736移动数据文件: 1、首先使要移动数据文件的表空间离线. ... -
Oracle 死锁会话处理收藏
2009-01-21 11:31 1172--查询所有的死锁: SELECT * FROM V$LOCK ... -
Oracle 9i 打开autotrace on 查看执行计划收藏
2009-01-21 11:31 13331.创建表,通过utlxplan脚本 SQL> @? ... -
如何启用sqlplus的AutoTrace功能收藏
2009-01-21 11:31 847通过以下方法可以把Autotrace的权限授予Everyone ... -
user和schema的区别:
2009-01-21 11:30 1053说穿了其实user是控制权限的,而schema是个容器,非所有 ... -
解决Oracle数据文件和日志文件丢失的问题收藏
2009-01-21 11:29 2102今天不小心误删除了数据库的数据文件和日志文件,在启动数据库时报 ... -
Oracle表段中的高水位线HWM收藏
2009-01-21 11:28 2633在Oracle数据的存储中, ... -
深入了解oracle的高水位(HWM)收藏
2009-01-21 11:26 2273说到HWM,我们首先要简要的谈谈ORACLE的逻辑存储管理.我 ... -
ORACLE 日志文件相关查询收藏
2009-01-21 11:25 11931.查询系统使用的是哪一组日志文件: select * fro ... -
ORACLE热备份恢复手册收藏
2009-01-21 11:22 2331概要 1.1. 本文的目的 为了模拟测试oracle热备份的 ... -
(转)windows命令行下启动oracle
2009-01-21 09:56 1529--总结启动命令如下: lsnrctl [start|stop ... -
小议分析函数中排序对结果的影响(一)
2009-01-12 13:24 927分析函数中经常会包括O ... -
ORACLE10g新特性——全局HASH分区索引
2009-01-12 13:23 1763在10g以前,Oracle的全局索引分区方法只有一种,即范围分 ... -
深入认识Oracle Supplemental logging
2008-12-22 18:35 3143对于有过逻辑standby,streams搭建体验的朋友,肯定 ... -
深入分析Oracle数据库日志文件
2008-12-22 15:19 1000深入分析Oracle数据库日志文件 作者:程永新 发文时间: ...
相关推荐
在Oracle数据库中,为了获取来自多个表的数据,我们需要使用不同的连接方式来实现这一目的。本文将详细介绍三种主要的表连接方式:嵌套循环连接(Nested Loop Join,简称NL Join)、排序合并连接(Sort Merge Join,...
本文将深入探讨Oracle数据库SQL开发中的多表连接技术,解析其核心概念、类型及应用场景。 ### 多表连接的目的与重要性 多表连接是指在SQL查询中,通过特定的条件将两个或多个表中的数据行进行关联,从而获取包含多...
了解和掌握Oracle数据库中的不同表连接方式,可以帮助DBA和开发人员做出更明智的决策,以优化查询性能。NESTED LOOP JOIN适用于小型数据集,HASH JOIN适用于大数据集,而SORT MERGE JOIN则在数据预排序时表现出色。...
在VC++环境中,连接Oracle数据库通常有三种方法:ActiveX数据对象(ADO)、Oracle Call Interface(OCI)和Pro*C/C++。每种方法都有其特定的优缺点和适用场景。 1. ADO (ActiveX Data Objects) 连接: ADO是Microsoft...
Oracle免安装客户端,也被称为Instant Client,是Oracle公司提供的一种轻量级的数据库连接工具,无需完整安装Oracle数据库服务器即可使用。它包含了连接到Oracle数据库所需的基本组件,如OCI(Oracle Call Interface...
综上所述,文件《Unix下基于OCI的Oracle数据库的访问.pdf》系统地介绍了在Unix环境下如何使用OCI接口与Oracle数据库交互的详细步骤和方法,同时对OCI接口进行了深入的分析和封装说明,以及与其他访问方式的比较。...
安装过程中,通常需要设置ArcGIS Server和Oracle数据库的连接参数,配置数据库模式,创建必要的系统表和索引,以及设置用户权限。安装完成后,ArcGIS Server可以通过ArcSDE接口直接存取Oracle 11g中的空间数据,提供...
"Oracle10g数据库的搭建及维护分析" 数据库环境介绍: Oracle10g数据库是一个关系型数据库管理系统,具有高性能、安全性强、可扩展性好等特点。搭建一个Oracle10g数据库实例需要在一台主机上安装Oracle服务器版,...
标题中的"ORACL_exp.exe"指的是Oracle数据库的导出工具,即`exp.exe`,它是Oracle Database早期版本中用于导出数据库对象的数据和结构的命令行实用程序。这个工具允许用户将数据库的一部分或全部导出到一个二进制的...
接着,可以使用以下VB6.0代码片段来建立数据库连接: ```vb Dim conn As ADODB.Connection Set conn = New ADODB.Connection conn.ConnectionString = "DSN=你的DSN名称;UID=用户名;PWD=密码" conn.Open ``` 这段...
7. **Web服务和API**:在分布式系统中,数据库连接常通过Web服务(如RESTful API)进行。Windows Server可以作为Web服务器部署API,供其他系统调用,间接实现数据库的跨平台访问。 8. **数据库连接池**:为了优化...
在Oracle数据库管理中,创建一个新的数据库是至关重要的步骤,尤其在Oracle 9i版本中,这一过程更加规范化和灵活。本章将详细讲解如何创建Oracle数据库,主要关注两种方法:使用数据库配置助手(DBCA)和手工编写脚本...
1. **Oracle Net Services**:也称为Oracle网络服务或TNS(Transparent Network Substrate),是Oracle数据库连接的基础。它提供了多种网络协议和连接方式,如TCP/IP、 Named Pipes等,使得客户端可以透明地访问远程...
7. **工具的使用**:这类工具通常会要求用户提供数据库连接信息(如服务器地址、用户名、密码、数据库名),然后自动扫描并解析数据库的表结构,将其转换为预设的Word模板。用户可以根据需要自定义输出的样式和内容...
描述中的"支持SQL2005及以上 Oracle"指出,该工具至少兼容两种常见的关系型数据库管理系统:SQL Server 2005及其更高版本以及Oracle。SQL Server 2005是一个重要的里程碑,引入了许多新特性,如集成服务、资源管理器...
Oracle数据库作为一款功能强大的数据库管理系统,广泛应用于大型信息系统开发中。使用PL/SQL Developer作为其客户端工具,开发人员可以便捷地编写SQL语句、调试存储过程等。然而,传统的Oracle客户端或服务器安装...
在Oracle数据库中,直方图主要用于帮助优化器了解表中数据的分布情况,特别是对于那些具有显著数据偏斜性的列。通过这些信息,优化器可以更准确地估算出查询的成本,从而选择更优的执行计划。例如,当WHERE子句中的...
- ArcSDE配置:安装并配置ArcSDE服务,建立与Oracle数据库的连接。 - 数据加载:将预处理后的空间数据通过ArcSDE导入Oracle数据库。 - 应用程序开发:利用前端开发工具创建用户界面,通过ArcSDE API实现数据查询、...