Oracle提高SQL在数据库中执行效率,不得不看

数据库 Oracle
以下的文章主要讲述的是Oracle提高SQL执行效率的3种较为实用的方法,其中包括正确使用ordered的提示,对utheordered_predicates的实际操作等相关内容描述。

如果你想对Oracle提高SQL在Oracle数据库中的实际执行效率大大提高的话,你首先要优化其实际应用的业务逻辑是最为主要的,以下的文章主要是从技术层面来讲Oracle也提供了一些方法,今天主要讲3种:

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

1、使用ordered提示

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

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

Listing A如下:

以下是引用片段:

 

  1. Listing A  
  2. select /*+ ordered use_nl(bonus)  
  3. parallel(e, 4) */ e.ename, hiredate, b.comm from emp e, bonus b  
  4. 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、限制表格合并评估的数量

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

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

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

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

【编辑推荐】

  1. 如何正确对Oracle database link进行布式
  2. Oracle redo的条目主要包含的内容
  3. Oracle通过存储过程如何正确返回数据集?
  4. Oracle数据库中常用时间的正确处理方案
  5. 如何正确把Oracle数据导出成Txt 的格式?
责任编辑:佚名 来源: 博客园
相关推荐

2010-05-25 09:58:43

MySQL数据库

2010-05-18 10:34:29

MySQL数据库备份

2010-06-12 15:03:55

2010-07-23 18:39:52

SQL Server游

2010-04-21 17:19:29

Oracle创建

2010-05-26 15:58:52

MySQL远程连接

2010-05-21 09:40:57

MySQL出错代码列表

2010-05-10 13:01:03

OracleDBA面试

2010-05-05 11:30:21

2014-10-30 13:38:55

编程算法程序员

2019-04-09 13:10:44

工业大数据互联网工业生产

2010-08-02 11:01:29

DB2 Resotre

2010-05-26 13:14:22

MySQL错误解决方案

2019-12-10 15:30:27

SaaSIaaS云计算

2017-05-17 14:46:22

容器DockerLinux

2018-11-12 14:17:05

Oracle数据库Oracle书籍

2010-09-28 09:42:16

2010-08-18 15:01:08

DB2 9安装方法

2010-08-18 11:36:40

DB2简史

2019-06-27 16:28:39

数据可视化JupyterGoogle Char
点赞
收藏

51CTO技术栈公众号