您当前位置:优侠库 > 资讯攻略 >
来源:未知
2020-03-09 20:14:00 浏览: 分类:资讯攻略

oracle常用hint的用法

书写提示目的

指定手动SQL语句的执行计划

提示是oracle提供的一种机制,用来告诉优化器按照我们告诉它的方式生成执行计划。我们可以使用提示来实现这一点:

1)使用的优化器的类型

2)基于成本的优化器的优化目标是all_rows还是first_rows。

3)表的访问路径,是全表扫描、索引扫描,还是直接使用rowid。

4)表之间的连接类型

5)表之间的连接顺序

6)语句的并行性

2.提示可以基于以下规则工作

表连接的顺序、表连接的方法、访问路径、并行度

3.提示应用范围

Dml语句

查询语句

4.语法

{删除|插入|选择|更新} /*+提示[文本][提示[文本]]...*/

或者

{删除|插入|选择|更新} - +提示[文本][提示[文本]]...

如果语法(句子)不正确,ORACLE将自动忽略书面提示,而不会报告错误。

1./*+所有行*/

结果表明,基于代价的优化方法被用于语句块,并且获得最佳吞吐量以最小化资源消耗。

例如:

SELECT /*+ALL_ROWS*/ EMP_NO,EMP_NAM,DAT _ IN FROM BSEMPMS其中EMP _ NO = ' SCOTT

2./*+第一行*/

结果表明,基于代价的优化方法被用于句子块,并且获得了最佳响应时间以最小化资源消耗。

例如:

SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT _ IN FROM BSEMPMS其中EMP _ NO = ' SCOTT

3./*+选择*/

它表明,如果数据字典中有访问表的统计信息,它将基于成本进行优化,并获得最佳吞吐量。

说明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;

例如:

SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT _ IN FROM BSEMPMS其中EMP _ NO = ' SCOTT

4./*+规则*/

它表明,基于规则的优化方法被用于句子块。

例如:

SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT _ IN FROM BSEMPMS其中EMP _ NO = ' SCOTT

5./*+满(表)*/

指示为表选择全局扫描的方法。

例如:

SELECT /*+FULL(A)*/ EMP_NO,EMP _ NAM FROM BSEMPMS A其中EMP _ NO = ' SCOTT

6./*+ROWID(表)*/

提示符清楚地表明指定的表是根据ROWID访问的。

例如:

SELECT/*+ROWID(BSE mpms)*/* FROM BSE mpms其中ROWID & gt='AAAAAAAAAAAAAA '

而EMP _ NO = ' SCOTT

7./*+群集(表格)*/

该提示明确指出了指定表的集群扫描的访问方法,该方法仅对集群对象有效。

例如:

SELECT /*+CLUSTER */ BSEMPMS。BSEMPMS、BSDPTMS中的EMP_NO、DPT_NO

其中DPT_NO='TEC304 '和BSEMPMS。DPT_NO=BSDPTMS。DPT _ NO

8./*+INDEX(表索引名称)*/

指示表选择索引的扫描方法。

例如:

SELECT/*+INDEX(BSEMPMS SEX_INDEX)使用SEX _ INDEX,因为在SEX='M '的BSE mpms中很少有男性BSE mpms */;

9./*+INDEX_ASC(表格索引名称)*/

指示为表选择升序索引的扫描方法。

例如:

SELECT/*+INDEX _ ASC(BSE mpms PK _ BSE mpms)*/FROM BSE mpms其中DPT _ NO = ' SCOTT

10./*+索引_合并*/

为指定的表选择位图访问路径。如果索引没有作为INDEX_COMBINE中的参数提供,将选择位图索引的布尔组合。

例如:

SELECT/*+INDEX _ COMBINE(BSE PMS SAL _身体质量指数HIREDATE _身体质量指数)*/* FROM BSE PMS

SAL & lt5000000英镑和租金

11./*+INDEX_JOIN(表索引名称)*/

显式命令优化器使用索引作为访问路径。

例如:

SELECT/*+INDEX _ JOIN(BSE PMS SAL _ HMI HIREDATE _身体质量指数)*/ SAL,HIREDATE

来自BSEMPMS,其中SAL & lt60000;

12./*+索引_DESC(表索引_名称)*/

指示为表选择降序索引的扫描方法。

例如:

SELECT/*+INDEX _ desc(BSE mpms PK _ BSE mpms)*/FROM BSE mpms其中DPT _ NO = ' SCOTT

13./*+索引_FFS(表索引_名称)*/

对指定的表执行快速全索引扫描,而不是全表扫描。

例如:

SELECT/*+INDEX _ FFS(BSE mpms IN _ EMPNAM)*/* FROM BSE mpms其中DPT _ NO = ' TEC305

14./*+ADD_EQUAL表INDEX_NAM1,INDEX_NAM2,...*/

提示明确执行规划的选择,结合多个单列索引的扫描。

例如:

SELECT/*+INDEX _ FFS(BSE mpms IN _ DPT NO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS其中EMP_NO='SCOTT ',DPT _ NO = ' TDC306

15./*+USE_CONCAT*/

查询中WHERE后面的OR条件被转换为UNION ALL的组合查询。

例如:

SELECT/*+USE _ CONCAT */* FROM BSE PMS其中DPT_NO='TDC506 '和SEX = ' M

16./*+否_展开*/

对于WHERE后的or或IN-LIST查询语句,NO_EXPAND会阻止其基于优化器展开。

例如:

SELECT/*+NO _ EXPAND */* FROM BSE PMS其中DPT_NO='TDC506 '且SEX = ' M

17./*+NOWRITE*/

禁止重写查询块的查询。

18./*+重写*/

您可以将视图作为参数。

19./*+合并(表格)*/

可以相应地合并视图的查询。

例如:

SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B . DPT _ NO FROM BSE mpms A(SELET DPT _ NO

,avg(SAL) AS AVG_SAL来自BSEMPMS B组BY DPT_NO) V其中A.DPT_NO=V.DPT_NO

和一个SAL & gtAVG萨尔;

20./*+NO_MERGE(表格)*/

对于可以合并的视图,不会再次合并。

例如:

SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B . DPT _ NO FROM BSE mpms A(SELECT DPT _ NO,AVG(SAL)AS AVG _ SAL FROM BSE mpms B GROUP BY DPT _ NO)V其中A.DPT_NO=V.DPT_NO且A . SAL & gtAVG萨尔;

21./*+有序*/

根据表在FROM中出现的顺序,ORDERED使ORACLE按此顺序连接它们。

例如:

从表1 A,表2 B,表3 C中选择/*+ORDERED*/ A.COL1,B.COL2,C.COL3其中A.COL1=B.COL1,B . COL1 = C . COL1

22./*+USE_NL(表格)*/

将指定的表与嵌套的已连接行源连接,并将指定的表用作内部表。

例如:

SELECT/*+ORDERED USE _ NL(BSE mpms)*/BSD ptms。DPT_NO,BSEMPMS。EMP_NO,BSEMPMS。BSE PMS中的EMP_NAM,BSDPTMS WHERE BSEMPMS。DPT_NO=BSDPTMS。DPT _ NO

23./*+USE_MERGE(表格)*/

通过合并排序连接将指定的表与其他行源连接起来。

例如:

SELECT/*+USE _ MERGE(BSE PMS,BSDPTMS)*/* FROM BSE PMS,BSDPTMS WHERE BSEMPMS。DPT_NO=BSDPTMS。DPT _ NO

24./*+USE_HASH(表)*/

通过哈希连接将指定的表与其他行源连接起来。

例如:

SELECT/*+USE _ HASH(BSE PMS,BSD ptms)*/* FROM BSE PMS,BSDPTMS WHERE BSEMPMS。DPT_NO=BSDPTMS。DPT _ NO

25./*+行车_站点(表格)*/

对ORACLE选择的不同位置的表强制执行查询。

例如:

SELECT/*+DRIVING _ SITE(DEPT)*/* FROM BSE mpms,DEPT@BSDPTMS WHERE BSEMPMS。DPT _ NO =部门DPT _ NO;

26./*+前导(表格)*/

将指定的表作为联接顺序中的第一个表。

27./*+缓存(表)*/

当执行全表扫描时,缓存提示可以将表的检索块放在缓冲区缓存中LRU最近使用的一端。

例如:

SELECT/*+FULL(BSE mpms)CAHE(BSE mpms)*/EMP _ NAM FROM BSE mpms;

28./*+NOCACHE(表)*/

当执行全表扫描时,缓存提示可以将表的检索块放在缓冲区缓存中LRU最近使用的一端。

例如:

SELECT/*+FULL(BSE mpms)no cahe(BSE mpms)*/EMP _ NAM FROM BSE mpms;

29./*+追加*/

直接插入表尾可以提高速度。

insert /*+append*/到test1 select * from test4

30./*+无附件*/

通过在insert语句的生存期内停止并行模式来启动常规插入。

insert /*+noappend*/到test1 select * from test4

31.NO_INDEX:指定不使用哪些索引。

/*+ NO_INDEX(表[索引[索引]...] ) */

select/*+no _ index(EMP ind _ EMP _ sal ind _ EMP _ deptno)*/* from EMP其中deptno=200且sal & gt300;

32.平行的

select /*+ parallel(emp,4)*/ * from emp其中deptno=200且sal & gt300;

另外:每个SELECT/INSERT/UPDATE/DELETE命令后面只能有一个/*+*/,但是可以有多个提示内容,可以用逗号分隔,或者空。

如:/*+有序索引()use_nl() */

关键词:甲骨文

优侠库网站每天提供最新最热门的安卓手机软件、游戏下载、分享热门手游资讯攻略教程、手机软件教程步骤,专注安卓手机游戏软件下载。

本文链接:http://www.123down.cn/gonglue/227426.html

攻略资讯
安卓软件