相对而言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是没有作用的(切记)

注意,因为新浪博客自动屏蔽hint完整写法,因此只写了核心部分,无法写全!

oracle 强制索引 hint,oracle常用hint详解相关推荐

  1. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  2. 视频教程-Oracle数据库从入门到实用教程详解-Oracle

    Oracle数据库从入门到实用教程详解 全栈工程师,2010年从事软件开发以及软件教育培训工作,至今将近十余年,在项目的开发,设计,到管理上积累了丰富的实战经验,教学风格上通俗易懂,问题解答环节一对一 ...

  3. java metadata 使用_java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMet ...

  4. oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...

    ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...

  5. oracle itl解析,oracle数据块dump文件中ITL详解

    oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...

  6. oracle回滚断查询,Oracle回滚段使用查询代码详解

    大批量执行DML语句造成回滚段大量占用,又回退操作,如何直观查询数据回滚情况? 单机环境 查询回滚执行进度 sql;"> select /*+ rule */s.sid,r.name ...

  7. Oracle 11g R2+RAC+ASM+redhat安装详解1

    Oracle RAC是Oracle Real Application Cluster的简写,官方中文文档一般翻译为"真正应用集群",它一般有两台或者两台以上同构计算机及共享存储设备 ...

  8. 抢鲜体验:Oracle 19C单实例数据库安装步骤详解

    抢鲜体验:Oracle 19C单实例数据库安装步骤详解 原创: 李宏达 数据和云 今天 作者:李宏达,云和恩墨北区交付工程师. 大家一直期待的 Oracle Database 19c 今天已经提供公开 ...

  9. oracle rac 环境配置文件,学习笔记:Oracle RAC spfile参数文件配置案例详解

    天萃荷净 rac中的spfile探讨,记录一下Oracle RAC搭建完成后关于spfile参数文件的配置案例,与更改RAC环境中参数文件的方法 今天朋友的的rac,因为被同事做数据库升级,分别在两个 ...

  10. oracle 误删除表数据,Oracle误删除表数据后的数据恢复详解

    Oracle误删除表数据后的恢复详解 测试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_rete ...

最新文章

  1. java-第十一章-类的无参方法-计算器运算
  2. CNCF 官方大使张磊:什么是云原生?
  3. Function实现ALV Table六:页眉页脚
  4. 计算机应用头部案例提交,基于头部位置的应用程序放置的制作方法
  5. Android开发笔记(四十六)手机相关事件
  6. mormot json操作
  7. 软件测试er如何写简历?让砖厂无法拒绝你
  8. python生成树状图_python 字典生成树状图
  9. 2021年国家统计局发布全国统计用区划代码和城乡划分代码
  10. python wheel是什么意思_python中wheel指的是什么
  11. 洛谷 2678 跳石头
  12. android 删除一个工程,Android Studio该怎样删除项目?
  13. 关于手持设备PDA的开发
  14. 去哪找到高薪工作怎么找
  15. Flutter 组件之AlertDialog、SimpleDialog、showModalBottomSheet、showToast、自定义Dialog
  16. 四十、Flume自定义MySQLSource
  17. Oracle VM VirtualBox 虚拟机打开报错: 内存不能为read
  18. Golang语言快速上手到综合实战(Go语言、Beego框架、高并发聊天室、豆瓣电影爬虫) 下载
  19. P25边缘保留滤波(EPF滤波)
  20. ExtJs 常用代码片段(7.30更新)

热门文章

  1. 国产当自强,3秒开机,银河麒麟系统有多强?
  2. 九天毕昇训练yoloV5,50小时免费的v100
  3. js中同时得到整数商及余数_js取整数、取余数的方法
  4. ssRender引擎 制作一个音乐播放器
  5. 解决两个对话框传值程序中断在ASSERT(::IsWindow(m_hWnd)); return InsertItem(LVIF_TEXT, nItem, lpszItem, 0, 0, 0, 0);
  6. pandas 把重复的列后面对应的列合并在一个单元格内并删除重复值
  7. Java学习笔记:办公自动化简介及PDF文件分析
  8. x264的一些编码参数
  9. tf28: 手写汉字识别
  10. linux运维上机题,Linux运维入门实战题