`
juji1010
  • 浏览: 114878 次
社区版块
存档分类
最新评论

提高Oracle SQL的执行效率的3个方案

阅读更多
如果你想要提高Oracle SQL的执行效率的话,其优化应用的相关业务逻辑是最为主要的,我们主要是从技术层面来讲的关于Oracle数据库也提供了一些好用的方法,我们今天今天主要讲3种:

Oracle提供了多种方法用于减少花在剖析Oracle SQL表达式上的时间,在执行带有大量执行计划的复杂查询时剖析过程会拖累系统的性能。现在我们来简要地看看这些方法中的几种。

1、使用ordered提示

Oracle必须花费大量的时间来剖析多表格的合并,用以确定表格合并的最佳顺序。如果Oracle SQL表达式涉及七个乃至更多的表格合并,那么有时就会需要超过30分钟的时间来剖析,因为Oracle必须评估表格合并所有可能的顺序。八个表格就会有40,000多种顺序。Ordered这个提示(hint)和其他的提示一起使用能够产生合适的合并顺序。

Ordered这个提示会要求列在SQL表达式FROM字句里的表格按照指定的顺序进行合并,FROM字句里的第一个表格会指定驱动表格(driving table)。驱动表格应该是返回最小行数的表格。使用ordered提示会跳过非常耗时和耗资源的剖析操作,并加快Oracle SQL的执行。

Listing A如下:

以下是引用片段:


Listing A  select /*+ ordered use_nl(bonus)  parallel(e, 4) */ e.ename, hiredate, b.comm from emp e, bonus b  where e.ename = b.ename ; 
Listing A里是一个复杂查询的例子,这个查询被强制进行一个嵌套循环,从而与对emp表格进行的并行查询合并。要注意,我已经使用ordered提示来引导Oracle去按照WHERE子句所列出的顺序来评估表格。

2、使用theordered_predicates

ordered_predicates提示在查询的WHERE子句里指定的,并被用来指定布尔判断(Boolean predicate)被评估的顺序。在没有ordered_predicates的情况下,Oracle会使用下面这些步骤来评估Oracle SQL判断的顺序:

子查询的评估先于外层WHERE子句里的Boolean条件。

所有没有内置函数或者子查询的布尔条件都按照其在WHERE子句里相反的顺序进行评估,即最后一条判断最先被评估。

每个判断都带有内置函数的布尔判断都依据其预计的评估值按递增排列。

你可以使用ordered_predicates提示来强制取代这些缺省的评估规则,那么你WHERE子句里的项目就会按照其在查询里出现的顺序被评估。在查询的WHERE子句里使用了PL/SQL函数的情况下,通常会使用ordered_predicates提示。

如果你知道限制最多的判断并且希望Oracle最先评估这些判断的时候,在这种情况下,它也是非常有用的。用法提示:你不能使用ordered_predicates提示来保存对索引键进行判断评估的顺序。

3、限制表格合并评估的数量

提高SQL剖析性能的最后一种方法是强制取代Oracle的一个参数,这个参数控制着在评估一个查询的时候,基于消耗的优化器所评估的可能合并数量。

optimizer_search_limit这个参数会指定表格合并组合的最大数量,后者将会在Oracle试图确定合并多表格最佳方式的时候被评估。这个参数有助于防止优化器花更多的时间来评估可能的合并顺序,而不是把时间花在寻找最佳合并顺序上。

optimizer_search_limit还控制着用于调用star join提示的阙值,当查询里的表格数量低于optimizer_search_limit(其缺省的值是5)的时候,star提示就会被光顾。

以上只是一些Oracle DBA用来优化Oracle数据库应用程序Oracle SQL查询的性能的一些小技巧。

分享到:
评论

相关推荐

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

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    LECCO SQL Expert (智能自动SQL优化)

    直至无法产生新的输出或搜索限额满→对 输出的SQL语句进行过滤,选出具有不同执行计划的SQL语句(即不同的执行效率)→对得到的SQL语句进行批量测试,找出性能最好的SQL语句。图2 优化前的SQL语句 自动优化实例 假设...

    Oracle_Database10g_性能调整与优化-第10章_使用PLSQL提高性能

    PL/SQL引擎处理所有的PL/SQL请求,并且将代码传递给Oracle去执行。当PL/SQL被传递给Oracle之后,通常是放置在Oracle的系统全局区(SGA)中,特殊情况下会放置在共享池内。在Oracle中,PL/SQL的源代码可以以过程、函数...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    15.2.5提高内存的访问效率 15.3 RAC Database 15.3.1 Oracle版本 15.3.2数据表空间的调整 15.3.3 DML语句性能调整 15.3.4临时表空间的调整 15.3.5日志文件的调整 15.3.6 UNDO表空间的调整 15.4应用系统 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    3. scott用户:是个演示用户,是让你学习Oracle用的。 二、 常用命令 学习oracle,首先我们必须要掌握常用的基本命令,oracle中的命令比较多,常用的命令如下: 1. 登录命令(sqlplus) 说明:用于登录到oracle数据库 ...

    SQL培训第一期

    1 SQL基础 1.1 基本概念 结构化查询语言(Structured Query Language)简称SQL,是一种关系数据库查询语言,用于存取数据以及查询、更新和管理关系数据库系统。 1.2 语句结构 1.2.1 数据查询语言(DQL) 对数据库进行...

    ORACLE9i_优化设计与系统调整

    §14.2.4 SQL执行 172 §14.3 EXPLAIN PLAN 172 §14.4 选择优化器路径及目标 172 §14.4.1 OPTIMIZER_MODE初始参数 173 §14.4.2 数据字典中的统计数据 173 §14.4.3 ALTER SESSION语句的OPTIMIZER_GOAL参数 174 §...

    SQL性能优化

     在FROM后面的表中的列表顺序会对SQL执行性能影响,在没有索引及ORACLE没有对表进行统计分析的情况下ORACLE会按表出现的顺序进行链接,由此因为表的顺序不对会产生十分耗服务器资源的数据交叉。(注:如果对表进行...

    数据库设计和自动安装工具BDB V2.2(for Oracle/MS SQLServer/MySQL/Access/SQLAnywhere/Sybase)

    开放的数据库物理结构文件格式、并提供外部调用源程序, 包含C#、Delphi、JAVA三个版本。 8、数据库物理结构定义和实体数据库之间的比对更新、同步。 9、可为可重用属性创建数据字典定义、并进行同步。 ...

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

    《oracle数据库性能优化的艺术》内容高屋建瓴,用辩证法中的系统化分析方法,不仅从硬件(服务器系统、存储系统、网络系统等)、软件(操作系统、中间件系统、应用软件等)和应用场景(用户访问模式、用户使用频度、...

    SQLserver数据库管理系统需求分析.doc

    SQLServer是一个可扩展的、高性 能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有 机结合,提供了基于事务的企业级信息管理系统方案。 其主要特点如下: (1)高性能设计,可充分利用...

    SQLserver数据库管理系统需求分析(1).doc

    SQLServer是一个可扩展的、高性能的、为分布 式客户机/服务器计算所设计的,实现了与WindowsNT的有机结合,提供了基于的企业级 信息管理系统方案。 其主要特点如下: (1)高性能设计,可充分利用WindowsNT的优势。 ...

    ORACLE数据库智能化管理系统2012

    智能化SQL历史语句保存和历史SQL智能注解查询功能,节省了您智能化重复创建和查询SQL语句的时间,提高了您的工作效率。 数据库状态及运行情况综合查看,使您了解ORACLE运行状况及空间、日志归档、数据文件等使用情况...

    SQL智能完成工具BDB

    <br> 三、查询分析另外支持的一些功能 <br>1、支持CTRL+ENTER键执行。(同时支持ALT+ENTER键直接执行, 和CTRL+ENTER的区别:ALT+ENTER是执行原始语法,而前者则会进行解析, 如“DESC”语法)。...

    Oracle9i的init.ora参数中文说明

    如果设置为 FALSE, 将执行 PL/SQL V3 行为, 而不允许 V2 行为; 否则在运行 PL/SQL V3 时将接受某些 PL/SQL V2 行为。 值范围: TRUE | FALSE 默认值: FALSE plsql_native_make_utility: 说明: 指定 make 实用程序 ...

    Oracle Stream-安装配置

     Oracle 的Streams提供了信息共享的一种方式,区别于其它数据共享的方式,Streams甚至允许不同类型的数据库之间传递数据,实现这点的根本在于 Streams的复制流程,通过捕获,传播,应用三个步骤,将指定的信息传输...

    入门存储过程

    * 再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。 由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。 * ...

    AppFramework_V1.0_New

    代码生成器,ORMap,支持Oracle/SqlServer/MSAccess,性能大大优于iBatisNet,终身免费,随意使用。...下文将分入门、精通、高级三个篇章,详细讲述如何使用AppFramework数据库访问组件来搭建应用程序。

    AppFramework_V1.0

    1.1 引言 约有90%的企业信息化管理系统基于数据库实现,这类系统中又有超过30%的代码集中在数据访问层负责...下文将分入门、精通、高级三个篇章,详细讲述如何使用AppFramework数据库访问组件来搭建应用程序。

Global site tag (gtag.js) - Google Analytics