文档章节

oracle常用hint

adamduan
 adamduan
发布于 2015/04/13 13:21
字数 1232
阅读 29
收藏 0
点赞 0
评论 2

 相对而言ORACLE优化器已经非常智能,产生的执行计划也是最优的,但是ORACLE还是提供了一些hint供用户显示的控制执行计划,因为大千世界各种各样的业务都有,ORACLE优化器生成的执行计划并不一定适用于所有业务,同时hint对于DBA而言更是一件利器,我们可以通过hint看到优化后的执行计划,总结一下常用hint。

1.全表扫描hint full(table_name)

    相对而言,全表扫描hint使用场合较少,但是要知道,全表扫描并不一定比索引效率低,特别是查询表中80%以上的数据库,全表扫描的效率要高于索引扫描。

2.索引hint index(table_name index_name)

   这两种hint一个是强制使用索引,另一个是强制执行计划不要走索引,什么用呢?常用于SQL调优过程中对比索引和非索引扫描。
3.索引快速扫描hint index_ffs(table_name index_name)

    这种索引称之为索引快速扫描,常用于统计索引列键值的个数,如count(object_id),跟全表扫描很像,但效率要比全表扫描要高很多,也就是执行计划中看到的FAST FULL SCN
4.索引跳跃扫描hint index_ss(table_name index_name)

    该hint在执行计划中就是传说中的 INDEX SKIP SCAN 这个对新手而言不太好理解,举个例子索引有两个列(A,B)类型组合索引,但是查询中where条件只有B没有A select * from where b=1,此时ORACLE优化器走的索引就是所谓的索引跳跃扫描,只在CBO下适用,在RBO不适用。  
5.表关联hint  user_nl(table_name1 table_name2)

    此hint是表之间关联效率最高的一种,通常用于一大一小两表之间进行关联查询,小表作驱动表进行全表扫描,大表上要求有索引,走索引扫描,代价最低。

6.表关联hint use_hash(table_name1 table_name2)

    如果两个表一大一小,但是大表没有索引就会选择HASH,如果两个结果集比较小还可以承受,但是如果两个较大的表HASH的话,会直接将数据库HANG住,最好避免这种算法
7.表关联hint  user_merge(table_name1 table_name2)

    两个表进行关联,分别对全个表进行全表扫描后排序然后进行合并,排序既消耗内存又消耗CPU,总之代价比较大,常通过在两个表上创建索引避免此类连接的发生。因此对比后发现,只有nested_loop方式进行关联是最优的。

8.表顺序hint leading(table_name1 table_name2)

    在RBO模式下,我们常常通过考虑from 后面表的先后顺序来进行SQL优化,但是此方法对RBO模式不再适用,CBO模式下按照顺序选择驱动表
9.数据加载hint append()

    直接路径加载,对于大表操作极为有用,原理是什么呢?打个比方,好比两个超市理货员,一人一箱货需要上架到货架上,一个人去找货架中空闲位置去放,可能需要找N个空闲位,另一个人找一个空的货架直接放上去,那个效果最高?当然是第二个,此hint的作用就是让ORACLE找一个大空亲块直接存放新数据,而不是挤空闲位置去放新数据,如果此hint同时加上nologing联合使用效果更高,常用于数据迁移项目中。

10.dblink处理端hint driving_site(table_name)

    此hint常用于通过dblink连接处理数据的业务,它的作用是将本地表推送到远端数据库进行关联然后将结果返回,常用于本地表较小,远端表较大的情况,效果很是不错。

11.数据返回模式hint first_rows

    该hint是影响数据返回模式hint,添加后ORACLE将边处理边返回,数据仓库中用的比较多,但是在OLTP系统中也常见,上次系统优化就因为一兄弟在添加hint 时,添加后发现执行计划没变,于是将原有的hint first_rows 然后添加hint driving_site(),执行计划是变了,变化是因去去掉first_rows引起的,并且通过dblink远端数据库执行时查询全变成的全表扫描,导致两个业务大表hash,业务高峰直接将数据库宕机,因此该hint添加或删除一定要看远端执行计划有无发生变化,否则后果不开设想(切记)。

    特别需要注意的是,使用hint时切记查看表名是否使用了别名,如果使用了别名,记得要在hint中也要使用别名,否则hint是没有作用的(切记)


本文转载自:

共有 人打赏支持
adamduan
粉丝 10
博文 80
码字总数 8447
作品 0
大连
程序员
加载中

评论(2)

adamduan
adamduan

引用来自“程序猿中的败类”的评论

最近有啥活动带我个
最近没啥活动啊,你的知道啥活动叫我吧
程序猿中的败类
程序猿中的败类
最近有啥活动带我个
SQL优化常用方法42

使用提示(Hints) 对于表的访问,可以使用两种Hints. FULL 和 ROWID FULL hint 告诉ORACLE使用全表扫描的方式访问指定表. 例如: SELECT /+ FULL(EMP) / FROM EMP WHERE EMPNO = 7893; ROWID hi...

inzaghi1984
2017/12/17
0
0
Oracle原厂老兵:从负面案例看Hint的最佳使用方式

作者介绍 罗敏,从事Oracle技术研究、开发和服务工作20余年,在Oracle中国公司的10多年,分别在顾问咨询部、技术服务部担任资深技术顾问。曾参与国内银行、电信、政府等多个行业大型IT系统的...

罗敏
2016/10/12
0
0
Oracle查询数据库的索引字段以及查询用索引

可以查询数据库的表上面的索引字段。 参考博文: http://www.dba-oracle.com/toracleindexhintsyntax.htm Question: I added an index hint in my query, but the hint is being ignored. W......

Oscarfff
2016/11/01
10
0
Teiid 7.6 CR1 发布,数据虚拟化系统

Teiid是一个数据虚拟化系统,让应用程序使用来自多个异构数据存储的数据。 Teiid 7.6 CR1 发布了,修复了前一版本的 bug 外,还包含如下新特性: View removal hint - the NO_UNNEST hint n...

红薯
2011/11/18
264
0
oracle database query Optimizer 查询优化

多表连接查询优化: LEADING Hint Description of the illustration leadinghint.gif (See "Specifying a Query Block in a Hint", tablespec::=) The hint instructs the optimizer to use ......

Oscarfff
2016/06/13
35
0
Teiid 7.6 Final 发布,数据虚拟化系统

Teiid 7.6 正式版终于发布了,7.6 主要的亮点有: Procedure language features - Added support for compound/block statements, BEGIN [[NOT] ATOMIC], loop/block labels, and the leave ......

红薯
2011/11/30
198
0
PgSQL · 特性分析 · Plan Hint

背景 有一个功能,是社区官方版”永远”不考虑引入的(参见PG TODO,查找”Oracle-style”),即类似Oracle的Plan Hint。社区开发者的理念是,引入Hint功能,会掩盖优化器本身的问题,导致缺陷...

阿里云RDS-数据库内核组
2016/01/10
0
0
oracle笔记整理12——性能调优之hint标签

提示里不区分大小写, 多个提示用空格分开; 如果表使用了别名, 那么提示里也必须使用别名; 1) 优化器相关hint a) /+ALL_ROWS/ 表明对语句块选择基于cost的优化方法,并获得最佳吞吐量,使资源消...

thinkpadshi
2016/01/16
0
0
详解DBLINK操作的语句执行机制及优化方式

背景介绍 分布式查询语句对于远程对象的查询在远程库执行,在远程库可以执行的SQL语句会通过优化器的查询转换,执行的是转换后的语句,然后结果集返回到本地,再与本地表运算。当然,本地操作...

丁俊
2016/02/22
0
0
MySQL新版本将支持Hash Join?(附PPT)

作者介绍 好吧,标题显然目前还只是个噱头,但负责MySQL Server Tuning的研发总监表示在接下来的版本会考虑放进去,应该不是8.0,可能是9.0。 10月18日晚上,MySQL 8.0优化器新特性交流会如期...

杨志洪
2016/10/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
4
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
176
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部