关于Oracle的提示详解(1)

  1. 云栖社区>
  2. 博客>
  3. 正文

关于Oracle的提示详解(1)

技术小胖子 2017-11-09 00:08:00 浏览418
展开阅读全文

 对于Oracle性能调优来说,在初始设计的时候,按照Oracle 推荐的OMF进行安装配置之后是最优化的物理结构。

然而实际情况是这样的:大部分的性能很差的数据库,究其根本原因是为程序中的SQL代码很糟糕,很多程序员可能不清楚Oracle的体系结构,不知道Oracle对于一条sql是如何处理的,就会想当然的去写,造成语句未使用绑定变量,执行计划没有使用索引,大部分都是全表扫描。有时候部门就需要有一位对Oracle内部体系结构很清楚地DBA对开发人员进行培训,

有点儿悲剧的感觉。

好了,既然实际上是这样的,我在此就介绍一些优化的技巧:

Oracle 大概知道会有这样的情况,就给我们提供了一种优化的方案--提示

 

提示的基本语法是:

 /*+    提示名称  */    

像一种注释,提示名称就是具体的一些提示语法关键字 如:FULL

写出来就像这个样子:  select  /*+  FULL (table)  */ column1,.....  from   table

如果提示语法不正确,那也不用担心,除了没有达到预期的结果,也不会有什么影响,Oracle会忽略它。

 

.使用FULL提示

语法:  select  /*+  FULL (table)  */ column1,.....  from   table  

其中的 table 是执行全表扫描的表名,如果使用了表的别名,那就必须使用别名,否则提示将不能工作。 

示例: 

select    /*+   FULL(emp)  */  *  

from     emp

where   deptno= 1 ; 

1.使用scott 用户连接示例数据库:

打开sql 跟踪, set  autotrace  on

2.不添加提示执行上述语句并且在 deptno 有索引emp_deptno,输出的执行计划如下:执行的是索引范围扫描。

 

3.执行上述示例添加 FULL 提示执行结果如下: 执行计划执行的是全表扫描

 

 

提示:当一个表数据行不是很多的情况下,执行索引范围扫描比全表扫描要慢一些。

但是以上的图示去相反,全表扫描比索引范围扫描要慢,这是因为没有对表进行收集统计信息

4.执行表分析 analyze  table  emp  compute  statistics

在此执行上述SQL结果:

FULL提示

 

FULL提示:

 

对比以上结果可以看出,FULL提示对于优化某些小表是很有帮助的。

 

 



     本文转自andylhz 51CTO博客,原文链接:http://blog.51cto.com/andylhz2009/806064,如需转载请自行联系原作者



网友评论

登录后评论
0/500
评论
技术小胖子
+ 关注