关于Oracle的提示详解(1)

 对于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提示对于优化某些小表是很有帮助的。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值