Oracle数据库系统是世界上流行的关系数据库管理系统,因为系统可移植性好、使用方便、功能强,所以适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。

如果是还没有学习过Oracle基础技术的朋友,那么下面的内容暂时还用不到,可以先学一下Oracle的基础内容,后面再来看这篇Oracle优化的内容,看看下面的视频教程,可以帮助到你:

Oracle从入门到精通全套教程_数据库实战精讲

教程介绍:

本套教学视频中,以实际案例为基础,逐步理解并掌握各种Oracle数据库技术。不管你是Oracle数据库的初学者还是已经有一定的经验,本套教学视频都可以帮助你成为更加专业的Oracle数据库管理者或者开发者,这是Oracle数据库管理者的必备教程。

###下面是正文内容:

**该怎么优化数据库性能呢?有什么优化Oracle数据库的技巧吗?**其实技巧有很多,可以说是数不胜数,不过有一些常见的技巧可用于优化所有 SQL,下面是一些常见的 SQL 调优技巧和窍门。

1、首先调优工作负载:

在调优单个 SQL 语句之前,始终将工作负载作为一个整体进行调优,优化优化器参数(Optimizer _ mode、 Optimizer _ index _ Cost _ adj、 db _ file _ multiblock _ read _ count)。

2、避免重新解析 SQL 语句:

库缓存的目的是使 SQL 可重入,并且可以通过减少冗余 SQL 解析来提高响应时间。确保在适当的时候使用 cursor _ share。

3、使用物化视图:

物化视图可以预先汇总聚合和预连接表,使 SQL 在低容量更新活动的系统中运行得非常快。

4、永远不要假设 CBO 统计数据是正确的:

使用 GIGO 原则(垃圾输入、垃圾输出) ,毫不犹豫地使用 dbms _ stats 重新分析表和索引。

5、使用直方图进行调优:

许多常见的 SQL 问题(例如表连接顺序不理想)都是由不良的基数估计引起的。提前应用直方图(仅在需要时)来帮助优化器估计中间行集操作的大小。

6、使用基于函数的索引:

在几乎所有情况下,在SQL查询中使用to_char、decode、substr等内置函数可能会导致对目标表进行全表扫描。为了避免这个问题,许多Oracle dba将使用基于函数的索引创建相应的索引。如果相应的基于函数的索引与查询的内置函数匹配,Oracle将能够通过索引范围扫描为查询服务,从而避免潜在的昂贵的全表扫描。

7、分解复杂的 SQL :

可以使用 with 子句和全局临时表来平滑复杂的子查询,并使执行速度更快。

8、避免子查询:

可能的子查询类型(存在,在,不在)可以重写为标准连接,具有更快的性能。

9、注意那些违反直觉的提示:

像使用 rownum = 1这样的技巧可能是危险的。

10、谨慎使用视图:

视图旨在帮助最终用户,视图使复杂的查询“看起来”就像是一个离散的表一样。因此,针对视图运行生产查询可能会导致许多优化问题。

11、注意having子句:

通常可以使用with子句分解复杂的查询,以避免使用代价高昂的having子句。

12、始终引用一个索引列:

带有 where 子句的 SQL 如果不引用任何索引列,可能会导致不必要的大表全表扫描。

13、避免在子句谓词中使用 BIF:

不要通过更改子句谓词的左侧来使列无效(其中 subr (last _ name,1,3) = ‘ Jon’; 其中 trunc (my _ date) = trunc (sysdate)))。

14、使用 RULE 提示进行测试:

RULE 提示对于测试一个次优的 SQL 查询是否由于缺少索引而失败,或者由于 CBO 统计数据不好而失败非常有用。在许多情况下,RULE 提示的简单性可以帮助更快地调优 SQL 语句。

再次强调,这些只是一些常见的 SQL 调优技巧,还有很多很多,所以Oracle可学习的地方也有很多。

本文由博客一文多发平台 OpenWrite 发布!