Oracle Hint 用法

正确的语法是:

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 用法,布布扣,bubuko.com

时间: 2024-12-22 12:18:00

Oracle Hint 用法的相关文章

Oracle Hint的用法

1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT'; 2. /*+FIRST_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化. 例如: SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BS

PLSQL_PLSQL Hint用法总结(概念)

2014-06-20 BaoXinjian 一.摘要 手工指定SQL语句的执行计划 1. hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划.我们可以用hints来实现: 1) 使用的优化器的类型 2) 基于代价的优化器的优化目标,是all_rows还是first_rows. 3) 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid. 4) 表之间的连接类型 5) 表之间的连接顺序 6) 语句的并行程度 2.HINT可以基于以下规则产生作用 表连

Oracle purge 用法介绍

1.用途: 清除oracle 回收站(recyclebin)中的表和索引并释放与其相关的空间,还可清空回收站,或者清除表空间中记录的已删除的部分表空间. 注意:purge后不能回滚和恢复. 2.语法: 3.示例说明: 1)首先查一下回收站: SELECT * FROM RECYCLEBIN; 2)创建并删除同一表三次: --版本1 CREATE TABLE recycle_tmp(version NUMBER(10)); INSERT INTO recycle_tmp VALUES(1); CO

oracle merge用法

动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作. 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert). 实战: 接下来我们有一个任务,有一个表T,有两个字段a,b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录.在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL S

Oracle instr用法

1:实现indexOf功能,.从第1个字符开始,搜索第1次出现子串的位置 select instr('->Oracle instr用法','Oracle instr用法',1,1) as i from dual; select instr('oracle','or') as i from dual; 2:实现like功能 instr(name,'aa’)>0 相当于like instr(name,'aa’)=0 相当于not like

ORACLE RETURNING 用法总结

ORACLE RETURNING 用法总结 场景 在存储过程.PL/SQL块里需要返回INSERT.DELETE.UPDATE.MERGE等DML语句执行后的信息时使用,合理使用returning能够简化程序逻辑.提高程序性能. 概述 创建测试表 create table hh_emp_test as select * from scott.emp; 使用returning语句 declare v_empno hh_emp_test.empno%type; v_ename hh_emp_test

ORACLE基本用法

ORACLE基本用法 作为企业版的后台数据支撑,就首先要掌握oracle的使用方法!!! 注册用户之前,需要使用system管理员来进行注册功能!!! 1.首先创建新用户 2.这样就能使创建的新用户能够登陆吗?不,还需要分配权限 这样我们就能使用新的用户名来登陆了,我们来检索一下该用户下的表数据 二.使用MyEcplicse连接oracle 步骤一:window->show view->other->在文本框输入db,选择dbBrower. 页面如下: 右键新建,配置如下 完成!!! 三

Oracle触发器用法实例详解

本文实例讲述了Oracle触发器用法.分享给大家供大家参考,具体如下: 一.触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行. 因此触发器不需要人为的去调用,也不能调用. 然后,触发器的触发条件其实在你定义的时候就已经设定好了. 这里面需要说明一下,触发器可以分为语句级触发器和行级触发器. 详细的介绍可以参考网上的资料,简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发.而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次. 具体举例

Oracle minus用法详解及应用实例

Oracle minus用法 “minus”直接翻译为中文是“减”的意思,在Oracle中也是用来做减法操作的,只不过它不是传统意义上对数字的减法,而是对查询结果集的减法.A minus B就意味着将结果集A去除结果集B中所包含的所有记录后的结果,即在A中存在,而在B中不存在的记录.其算法跟Java中的Collection的removeAll()类似,即A minus B将只去除A跟B的交集部分,对于B中存在而A中不存在的记录不会做任何操作,也不会抛出异常. Oracle的minus是按列进行比