正确的语法是:

select /*+ index(x idx_t) */ * from t x where x.object_id=123

/*+    */ 和注释很像,比注释多了一个“+”,这就是Hint

上面这个hint的意思是让Oracle执行这个SQL时强制走索引。

如果hint的语法有错误,Oracle是不会报错,只是把/* */里的内容当做注释而已。

不合理使用Hint的危害:

由于表中的数据是会变化,一般不能在程序中的sql里用Hint,假如像上面的Hint一样强制走索引。万一某一天object_id=123的返回结果占了全表的50%以上,这时候走索引会比全表扫描慢。所以不该强制所有情况都走索引。Hint一般用于一次执行,比如做数据抽取。而且一般Oracle在99%的情况下会判断正确是否该走索引,不需要我们去指定。Hint只是为了应付1%的情况下。

Append的使用:

append是另一种Hint,一般用法:

insert /*+ append */ into b select * from a;

这种insert比普通的insert会快一些,但代价也大。

1、当表中的数据被delete以后,表空间会留下空隙,下次insert时会去填补空隙。但是append的insert不会去找空隙,而且直接追加到新的空间里。如果一直用append,会使表空间越来越大。

2、这点是比较致命的,就是用append的时候,会把整个表锁住,别的用户即使insert别的数据也要被阻塞。

所以生产环境肯定不能用append,append也一般用于数据抽取一类的工作。

其实大多数情况下,用append提高不了多少效率。

因为append之所以快的原因,是因为减少了日志产生。

只有以下场景append会减少日志产生:

1、非归档模式下

2、归档模式下,表的状态是nologging

首先非归档状态一般是不可能的,稍微重要点的系统都必须开归档。

归档模式下nologging一般也很少,没日志了,也就意味着将来恢复数据会不完整,这是有风险的。

总之就是,Hint适用的场景其实很少,就是知道有这么个东西,用的时候要谨慎。

Oracle Hint 用法的更多相关文章

  1. Oracle Hint用法整理笔记

    目录 1./+ result_cache / 2./+ connect_by_filtering / 3./+ no_unnset / 4./+ index(表别名 索引名) / 5./+ INDEX ...

  2. Oracle Hint用法总结

    1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...

  3. PLSQL_PLSQL Hint用法总结(概念)

    2014-06-20 Created By BaoXinjian

  4. /*+ hint*/用法,该如何解决

    /*+ use_hash(b, a)*/用法SELECT /*+ use_hash(b, a)*/  1,  NVL(b.AgentWorkGroup, ' '),  ................ ...

  5. SQL优化过程中常见Oracle HINT

    在SQL语句优化过程中,我们经常会用到hint,现总结一下在SQL优化过程中常见Oracle HINT的用法: 1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量, ...

  6. Oracle hint手动优化

    例子 select/*+FULL(fortest)*/ * from fortest where id = 2000000 //使用0.70s时间 select* from fortest where ...

  7. 【DBAplus】SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势

    原创 2016-09-12 韩锋  作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构. ...

  8. SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势

    一.提示(Hint)概述 1为什么引入Hint? Hint是Oracle数据库中很有特色的一个功能,是很多DBA优化中经常采用的一个手段.那为什么Oracle会考虑引入优化器呢?基于代价的优化器是很聪 ...

  9. ORACLE RETURNING 用法总结

    ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够 ...

随机推荐

  1. Baseline管理

    1.创建基线 SQL> exec dbms_workload_repository.create_baseline(start_snap_id=>,end_snap_id=>,bas ...

  2. UITextFiled

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...

  3. Jquery系列教程

    最近想重新温习下Jquery,发现园子里有个很棒的系列教材,所以Mark下来. 转载自:http://www.cnblogs.com/zhangziqiu/tag/jQuery%E6%95%99%E7 ...

  4. LIS 最长递增子序列

    一.最长公共子序列 经典的动态规划问题,大概的陈述如下: 给定两个序列a1,a2,a3,a4,a5,a6......和b1,b2,b3,b4,b5,b6.......,要求这样的序列使得c同时是这两个 ...

  5. Mac系统下控制鼠标移动

    CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); CGEventRef m ...

  6. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Team Formation

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5494 The 12th Zhejiang Provincial ...

  7. Java基础(39):数据的四舍五入、去整、产生随机数---Math类的应用

    使用 Math 类操作数据 Math 类位于 java.lang 包中,包含用于执行基本数学运算的方法, Math 类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如: M ...

  8. .NET: C#: Datetime

    比较简单的类,一般用到它的属性.经常会用到的是DateTime.Now和DateTime.Now.TimeOfDay; using System; using System.Collections.G ...

  9. Envelope对象介绍

    Envelope也称包络线,是一个矩形区域,是每个几何形体的最小外接矩形.每个Geometry都拥有一个Envelope,包括Envelope自身. 它定义了XMax,XMin,YMax,YMin,H ...

  10. paper 40 :鲁棒性robust

    最近只想安心.安静的科研,不想被任何人打扰,继续做自己,不忘初心,方得始终! 首先了解下鲁棒性这个词的定义.鲁棒性是指控制系统在一定(结构,大小)的参数摄动下,维持某些性能的特性.根据对性能的不同定义 ...