如果你想要提高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提供了多种方法用于减少花在剖析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查询的性能的一些小技巧。
发表评论
-
查看当前Session SQL
2014-07-08 11:51 1092SELECT (SELECT listagg(b.sql_te ... -
CLOB列 XML信息查看
2014-05-28 10:28 1027--使用该SQL查询节点情况 SELECT * FROM ... -
【转】ORACLE 临时表空间使用率过高的原因及解决方案
2012-12-25 15:24 1021http://www.cnblogs.com/wonder31 ... -
oracle:获取session的IP地址
2012-10-20 02:38 4311方法1 创建触发器: create orreplace ... -
Oracle ora-01002
2012-08-11 02:43 28956ORA-01002:fetch超出序列 ... -
Oracle STA
2012-08-06 11:32 0第一步:创建优化任务 ... -
Oracle SQL小技巧
2012-08-06 11:21 01.两个字段可空的判断相等,用decode判断。 例子:d ... -
自动工作负载库(Automatic Workload Repository,AWR)
2012-07-23 22:45 1430自动工作负载库(Automatic Workload Repo ... -
orace的隔离级别
2012-07-21 01:06 1107隔离级别(isoation eve) 隔离级别定义了事务与 ... -
Oracle SQLID 与 Hash_value 之间的相互转化
2012-07-20 00:55 4720一、什么是SQLID SQLID是根据SQL 文本,经过 ... -
Oracle优化器和索引原
2012-07-13 00:34 1282Oracle优化器和索引原理 ============ ... -
Oracle优化器的RBO和CBO方式
2012-07-13 00:25 2404[/size]Or[size=large][size=smal ... -
Oracle 优化器详解
2012-07-13 00:18 1357一、优化器基本知识 Oracle在执行一个SQL之前,首先 ... -
SQL中使用WITH AS提高性能
2012-07-05 23:30 1255摘要:本文结合笔者实 ... -
Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
2012-07-01 23:46 2139最近开始接触Oracle了,接触的越多越感受到自己的渺小!(o ... -
Oracle表连接操作——Hash Join(哈希连接
2012-05-20 17:05 0连接 http://space.itpub.net/?uid ... -
Oracle hash join
2012-05-20 17:00 955hash join是oracle里面一个 ... -
转--一次HASH JOIN 临时表空间不足的分析和优化思路
2012-05-20 15:36 4558最近遇到一个语句, 只要一执行这个语句就会出现报错临时表空间 ... -
SQL*PLUS SET 变量
2012-05-02 22:46 882SQL*PLUS SET变量 SQL*PLUS维护系 ... -
转---借助内存表处理复杂的oracle查询要求.
2012-03-25 23:23 1423借助内存表处理复杂的oracle查询要求. 在日常业务处理过 ...
相关推荐
### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常表现为资源过度消耗,这可能包括CPU时间、内存使用、磁盘I/O等。具体分析可从以下几个方面入手: 1. **响应时间...
在Oracle数据库管理中,批量执行SQL脚本是常见的任务...通过以上方法,我们可以高效地在Oracle中批量执行多个带参数的SQL文件,实现自动化处理,提升工作效率。在实际应用中,可以根据具体需求和环境选择最适合的方案。
以下是一些针对提高 SQL 执行效率的重要知识点: 1. **选择最有效的表名顺序**:在 FROM 子句中,Oracle 从右到左处理表,所以应该先处理记录数最少的表,以减少扫描的数据量。对于多表联接,基础表(被其他表引用...
Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表...只有通过合理的优化,我们才能提高数据库的性能,提高 SQL 语句的执行效率。
Oracle SQL Developer是Oracle生态系统中不可或缺的一部分,尤其对于那些需要频繁与Oracle数据库交互的开发者和DBA来说,它提供了一站式的解决方案,提高了工作效率并简化了数据库管理工作。无论你是初学者还是经验...
首先,了解SQL执行效率的基础在于理解查询执行计划。Oracle使用解析器解析SQL语句,然后生成执行计划,这个计划决定了数据如何被检索和处理。通过分析执行计划,我们可以发现潜在的性能瓶颈,如全表扫描、索引不当或...
Oracle批处理是数据库操作中提高效率的重要手段,尤其是在C#编程环境下,利用Oracle的数据驱动进行批处理,可以显著提升大量SQL语句执行的速度。本文将深入探讨如何在C#中利用Oracle自带的驱动来实现批处理,以一次...
总的来说,Oracle SQL Developer是一款功能强大的Oracle数据库管理工具,它提供了一站式的解决方案,涵盖了数据库的日常管理和开发工作。通过熟练掌握其使用技巧,可以极大地提升数据库管理的效率和准确性。
《Pro Oracle SQL》这本书不仅全面介绍了 Oracle SQL 的基础知识,还深入探讨了如何有效地利用 Oracle 提供的各种高级特性来提高数据处理的效率和安全性。通过学习本书,读者将能够更好地理解和运用 Oracle SQL,为...
Oracle的共享SQL语句机制存储解析后的语句在SGA的共享池中,减少解析开销,提高执行效率。相同的SQL语句(包括空格、换行等)会被视为同一个语句进行共享。但多表连接查询不支持高速缓冲。数据库管理员需要合理配置...
在Oracle SQL优化过程中,了解SQL执行计划至关重要。执行计划是Oracle解析SQL语句后确定的数据获取策略,它描述了数据如何从表和索引中被检索。通过分析执行计划,我们可以发现潜在的性能瓶颈,如全表扫描、过多的...
总的来说,Oracle SQL Developer x64是Oracle数据库管理的重要工具,它提供了一站式的解决方案,帮助开发者和DBA提高工作效率,同时简化了日常数据库维护和开发任务。其全面的功能和易用性使其成为Oracle数据库管理...
总的来说,Oracle SQL Developer Command-Line是一个强大且灵活的工具,适用于各种Oracle数据库管理工作,无论是日常查询、脚本执行还是自动化任务,它都能提供高效且便捷的解决方案。掌握sqlcl的使用,无疑能提升...
RowSourceGenerator接收优化后的方案,并生成最终的SQL执行计划。SQL执行引擎则根据执行计划运行查询并返回结果。 在ORACLE数据库中,优化器的选择和应用对于SQL优化至关重要。优化器有两种类型:基于规则的优化器...
- **SQL*Plus**:Oracle提供的一种命令行工具,用于执行SQL语句并查看结果。 - **Oracle GoldenGate**:用于实现数据复制和迁移的工具。 - **Oracle Data Guard**:提供数据保护、容灾和恢复等功能的解决方案。 ###...
为了提高SQL语句的执行效率,Oracle采用了SQL语句共享机制。在首次解析后,SQL语句会被存储在系统全局区域(SGA)的共享池中,供所有用户共享。这意味着,如果后续的查询与已有的完全相同,Oracle可以直接重用之前...
这主要是为了防止SQL语句变得过于复杂以及提高执行效率。但是,在实际应用中,我们常常需要处理的数据量远超这个限制。因此,本文将介绍一种有效的方法来解决这个问题。 #### 问题背景 当我们在Oracle中执行类似...
"Oracle 提高查询效率的方法" Oracle数据管理系统作为...提高 Oracle 查询效率需要从多方面考虑,包括优化 SQL 语句、创建合理的索引、选择合适的基础表、调整 WHERE 子句的顺序、避免使用 DISTINCT 和 ORDER BY 等。
总的来说,Oracle SQL Developer 是一个全方位的数据库管理解决方案,无论是对于初学者还是经验丰富的数据库专业人士,它都能提供必要的工具来高效地进行数据库管理工作。通过其丰富的特性和功能,用户能够更轻松地...
除了SQL共享之外,另一种提高SQL执行效率的方式是使用变量绑定。 - **绑定变量**:当一个SQL语句中包含某些常量值时,每次这些值变化都会导致新的硬解析发生。为了避免这种情况,可以使用绑定变量。例如,将一个...