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

带你轻松接触Oracle执行计划的相关概念

阅读更多
Oracle执行计划的相关概念:
Rowid:系统给oracle数据的每行附加的一个伪列,包含数据表名称,数据库id,存储数据库id以及一个流水号等信息,rowid在行的生命周期内唯一。

Recursive sql:为了执行用户语句,系统附加执行的额外操作语句,譬如对数据字典的维护等。

Row source(行源):oracle执行步骤过程中,由上一个操作返回的符合条件的行的集合。

Predicate(谓词):where后的限制条件。

Driving table(驱动表):又称为连接的外层表,主要用于嵌套与hash连接中。一般来说是将应用限制条件后,返回较少行源的表作为驱动表。在后面的描述中,将driving table称为连接操作的row source 1。

Probed table(被探查表):连接的内层表,在我们从driving table得到具体的一行数据后,在probed table中寻找符合条件的行,所以该表应该为较大的row source,并且对应连接条件的列上应该有索引。在后面的描述中,一般将该表称为连接操作的row source 2.

Concatenated index(组合索引):一个索引如果由多列构成,那么就称为组合索引,组合索引的第一列为引导列,只有谓词中包含引导列时,索引才可用。

可选择性:表中某列的不同数值数量/表的总行数如果接近于1,则列的可选择性为高。

Oracle访问数据的存取方法:

Full table scans, FTS(全表扫描):通过设置db_block_multiblock_read_count可以设置一次IO能读取的数据块个数,从而有效减少全表扫描时的IO总次数,也就是通过预读机制将将要访问的数据块预先读入内存中。只有在全表扫描情况下才能使用多块读操作。

Table access by rowed(通过rowid存取表,rowid lookup):由于rowid中记录了行存储的位置,所以这是oracle存取单行数据的最快方法。

Index scan(索引扫描index lookup):在索引中,除了存储每个索引的值外,索引还存储具有此值的行对应的rowid值,索引扫描分两步1,扫描索引得到rowid;2,通过 rowid读取具体数据。每步都是单独的一次IO,所以如果数据经限制条件过滤后的总量大于原表总行数的5%-10%,则使用索引扫描效率下降很多。而如果结果数据能够全部在索引中找到,则可以避免第二步操作,从而加快检索速度。

根据索引类型与where限制条件的不同,有4种类型的索引扫描:

Index unique scan(索引唯一扫描):存在unique或者primary key的情况下,返回单个rowid数据内容。

Index range scan(索引范围扫描):1,在唯一索引上使用了range操作符(>,<,<>,>=,<=,between);2,在组合索引上,只使用部分列进行查询;3,对非唯一索引上的列进行的查询。

Index full scan(索引全扫描):需要查询的数据从索引中可以全部得到。

Index fast full scan(索引快速扫描):与index full scan类似,但是这种方式下不对结果进行排序。

目前为止,典型的连接类型有3种:

Sort merge join(SMJ排序-合并连接):首先生产driving table需要的数据,然后对这些数据按照连接操作关联列进行排序;然后生产probed table需要的数据,然后对这些数据按照与driving table对应的连接操作列进行排序;最后两边已经排序的行被放在一起执行合并操作。排序是一个费时、费资源的操作,特别对于大表。所以smj通常不是一个特别有效的连接方法,但是如果driving table和probed table都已经预先排序,则这种连接方法的效率也比较高。

Nested loops(NL嵌套循环):连接过程就是将driving table和probed table进行一次嵌套循环的过程。就是用driving table的每一行去匹配probed table 的所有行。Nested loops可以先返回已经连接的行,而不必等待所有的连接操作处理完成才返回数据,这可以实现快速的响应时间。

Hash join(哈希连接):较小的row source被用来构建hash table与bitmap,第二个row source用来被hashed,并与第一个row source生产的hash table进行匹配。以便进行进一步的连接。当被构建的hash table与bitmap能被容纳在内存中时,这种连接方式的效率极高。但需要设置合适的hash_area_size参数且只能用于等值连接中。

Cartesian product(笛卡尔积):表的每一行依次与另外一表的所有行匹配。
分享到:
评论

相关推荐

    深入浅出Oracle.rar

    在"深入浅出Oracle"这份资料中,读者可能将接触到Oracle的安装配置、数据库设计、SQL查询优化、存储结构、备份恢复策略、性能调优、安全性管理以及高级特性等内容。通过学习,无论是数据库管理员、开发人员还是系统...

    oracle

    源码,意味着我们可以接触到Oracle数据库的底层实现,这对于开发者和研究者来说是非常宝贵的资源。通过分析源码,可以理解其工作原理,进行定制化开发,或者解决特定的技术问题。不过,Oracle的源码并不是公开的,但...

    Oracle.Database.11g.SQL.Nov.2007.pdf

    在《Oracle Database 11g SQL》一书中,读者可以学到如何使用SQL语句执行数据检索、插入、更新和删除操作,同时也会接触到更高级的主题,如索引、视图、存储过程和触发器的创建与管理。 ### 学习目标与价值 本书...

    Oracle_Database_2_Day_DBA_11g_Release_2

    无论是对于刚接触Oracle的新手,还是经验丰富的数据库管理员,这本书都是一个宝贵的资源,可以帮助他们更好地理解和利用Oracle数据库的强大功能,提升数据库的性能、安全性和可管理性。通过深入学习本书,DBA们可以...

    Oracle Database 10g : 数据库管理 - 课堂练习 I 学生指南第1册

    10. **数据库维护计划**:理解定期维护的重要性,学习如何制定和执行数据库的维护计划,包括数据清理、统计信息收集等。 通过《Oracle Database 10g: 数据库管理 - 课堂练习 I 学生指南第1册》中的这些练习,学生...

    傻瓜数据仓库系列.Oracle.11g.For.Dummies

    根据提供的信息,我们可以总结出以下关于《傻瓜数据仓库系列:Oracle 11g For Dummies》的关键知识点...无论你是刚刚接触 Oracle 数据库的新手还是希望进一步提升技能的老手,这本书都能够为你提供有价值的指导和支持。

    图文详解安装oracle enterprise linux 6.2

    总之,通过本教程的详细介绍,即使是初次接触Oracle Enterprise Linux 6.2的用户也能顺利完成安装,并对系统的基础配置和磁盘管理有初步了解。这不仅有助于提高安装的成功率,还为后续的系统管理和应用开发奠定了...

    ArcGIS轻松入门

    在学习这个系列教程时,你将接触到以下几个关键概念: - 地图投影:理解不同的地图投影方式,以及它们对数据的影响。 - 数据模型:了解矢量和栅格数据的区别,以及如何选择合适的存储方式。 - 空间分析:学习缓冲区...

    JAVA轻松入门 源代码

    【JAVA轻松入门 源代码】是一个针对初学者的编程学习资源,主要涵盖了Java语言的基础概念和实践操作。这个压缩包包含的是与课程配套的实验源代码,通过这些代码,学习者可以直观地理解Java编程的基本语法和常用结构...

    arcgis轻松入门系列(SDE)

    对于初次接触SDE的用户,理解其基本概念和操作至关重要。 1. **SDE简介**: SDE是Esri提供的一个中间件,它连接了GIS软件和数据库系统,如Oracle、SQL Server、PostgreSQL等,使得地理数据能够与传统结构化数据...

    Visual Basic 数据库开发从入门到精通

    在这一章,你将学习如何使用Visual Basic与Oracle数据库进行通信,这涉及到设置Oracle客户端、建立连接字符串、执行SQL语句等。Oracle数据库特有的特性如PL/SQL、游标、触发器等也将被讲解,这些将帮助你开发跨平台...

    Java 第三版全文翻译,纯属个人业余翻译.rar

    精心挑选的主题让您广泛地接触到Java的基本概念,而不会让您因信息过多而不知所措。虽然本书不可能涵盖每一个Java概念,但请放心,在本书结束时,您应该可以轻松编写自己的Java程序。在书后,我们将一起编写一个案例...

    ADO第一次亲密接触 教会你用ado

    ### ADO第一次亲密接触:详解ADO使用方法 #### 一、引言 ADO(ActiveX Data Object)是Microsoft提供的一种用于访问数据的技术,它在OLE DB的基础上进一步简化了数据库访问的过程,使得开发者能够更加轻松地操作...

    sql常用语句-中文手册直接运行

    通过这份中文手册,读者可以轻松掌握SQL的基本语法和实例,提升在Oracle数据库中的SQL编写能力。 1. SQL基础概念: SQL,全称结构化查询语言,包括数据查询、数据操纵、数据定义和数据控制四大功能。它是标准的...

    VB.NETandRawrecruit.rar_VB.net教程

    VB.NET还支持数据库操作,通过ADO.NET库可以轻松地连接到各种数据库,如SQL Server、Oracle等。在教程中,你可能还会接触到如何使用Dataset、DataTable、DataAdapter等对象进行数据操作。 最后,VB.NET与.NET ...

    ORACLEOBS系统应用基础.docx

    文章开头部分提到了很多用户初次接触ORACLE EBS时的困惑,以及社会上对于ORACLE EBS及其竞争对手SAP的不同看法。 **关键点**: - **用户困惑**:很多用户在初次使用ORACLE EBS时会感到不知所措,尤其是对于那些习惯...

    ADO.NET课件相关资料

    ADO.NET是微软.NET框架下的一种数据访问技术,用于与各种数据库进行交互,包括关系型数据库如SQL Server,Oracle,以及XML数据源等。这个“ADO.NET课件相关资料”压缩包显然包含了丰富的学习资源,可以帮助我们深入...

    计算机软件-编程源码-DELPHI从入门到精通.zip

    它集成了ADO(ActiveX Data Objects),使得开发者可以轻松地连接和操作各种数据库,如Oracle、MySQL、SQL Server等。你将在学习中了解如何创建数据感知组件,实现数据绑定,以及如何执行SQL查询。 此外,Delphi的...

    安卓开发环境搭建

    6. **了解安卓开发的基本概念**: 在开发过程中,你会接触到诸如Activity、Intent、Layout、XML资源文件、生命周期方法等概念。Activity是应用程序中的一个屏幕,Intent用于在组件之间传递消息,Layout是应用的用户...

    Java2实用教程(第3版)教学课件共21页.pdf.zi

    在本教程中,你将学习到类、对象、封装、继承、多态这些面向对象的基本概念。同时,也会接触到异常处理、输入/输出流、集合框架等核心内容。Java的集合框架包括List、Set、Queue等接口,以及ArrayList、HashSet、...

Global site tag (gtag.js) - Google Analytics