`
newleague
  • 浏览: 1492881 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

oracle hints常用

阅读更多

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 BSEMPMS WHERE EMP_NO='SCOTT';
3. /*+CHOOSE*/
表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量;
  表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;
  例如:
  SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
4. /*+RULE*/
表明对语句块选择基于规则的优化方法.
  例如:
  SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='SCOTT';
5. /*+FULL(TABLE)*/
表明对表选择全局扫描的方法.
  例如:
  SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT';
6. /*+ROWID(TABLE)*/
提示明确表明对指定表根据ROWID进行访问.
  例如:
  SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'
  AND EMP_NO='SCOTT';
7. /*+CLUSTER(TABLE)*/
提示明确表明对指定表选择簇扫描的访问方法,它只对簇对象有效.
  例如:
  SELECT /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS
  WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
8. /*+INDEX(TABLE INDEX_NAME)*/
表明对表选择索引的扫描方法.
  例如:
  SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE BSEMPMS */ FROM BSEMPMS WHERE SEX='M';
9. /*+INDEX_ASC(TABLE INDEX_NAME)*/
表明对表选择索引升序的扫描方法.
  例如:
  SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';
10. /*+INDEX_COMBINE*/
为指定表选择位图访问路经,如果INDEX_COMBINE中没有提供作为参数的索引,将选择出位图索引的布尔组合方式.
  例如:
  SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS
  WHERE SAL<5000000 AND HIREDATE
11. /*+INDEX_JOIN(TABLE INDEX_NAME)*/
提示明确命令优化器使用索引作为访问路径.
  例如:
  SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE
  FROM BSEMPMS WHERE SAL<60000;
12. /*+INDEX_DESC(TABLE INDEX_NAME)*/
表明对表选择索引降序的扫描方法.
  例如:
  SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */ FROM BSEMPMS WHERE DPT_NO='SCOTT';
13. /*+INDEX_FFS(TABLE INDEX_NAME)*/
对指定的表执行快速全索引扫描,而不是全表扫描的办法.
  例如:
  SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TEC305';
14. /*+ADD_EQUAL TABLE INDEX_NAM1,INDEX_NAM2,...*/
提示明确进行执行规划的选择,将几个单列索引的扫描合起来.
  例如:
  SELECT /*+INDEX_FFS(BSEMPMS IN_DPTNO,IN_EMPNO,IN_SEX)*/ * FROM BSEMPMS WHERE EMP_NO='SCOTT' AND DPT_NO='TDC306';
15. /*+USE_CONCAT*/
对查询中的WHERE后面的OR条件进行转换为UNION ALL的组合查询.
  例如:
  SELECT /*+USE_CONCAT*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';
16. /*+NO_EXPAND*/
对于WHERE后面的OR 或者IN-LIST的查询语句,NO_EXPAND将阻止其基于优化器对其进行扩展.
  例如:
  SELECT /*+NO_EXPAND*/ * FROM BSEMPMS WHERE DPT_NO='TDC506' AND SEX='M';
17. /*+NOWRITE*/
禁止对查询块的查询重写操作.
18. /*+REWRITE*/
可以将视图作为参数.
19. /*+MERGE(TABLE)*/
能够对视图的各个查询进行相应的合并.
  例如:
  SELECT /*+MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELET DPT_NO
  ,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO
  AND A.SAL>V.AVG_SAL;
20. /*+NO_MERGE(TABLE)*/
  对于有可合并的视图不再合并.
  例如:
  SELECT /*+NO_MERGE(V) */ A.EMP_NO,A.EMP_NAM,B.DPT_NO FROM BSEMPMS A (SELECT DPT_NO,AVG(SAL) AS AVG_SAL FROM BSEMPMS B GROUP BY DPT_NO) V WHERE A.DPT_NO=V.DPT_NO AND A.SAL>V.AVG_SAL;
21. /*+ORDERED*/
根据表出现在FROM中的顺序,ORDERED使ORACLE依此顺序对其连接.
  例如:
  SELECT /*+ORDERED*/ A.COL1,B.COL2,C.COL3 FROM TABLE1 A,TABLE2 B,TABLE3 C WHERE A.COL1=B.COL1 AND B.COL1=C.COL1;
22. /*+USE_NL(TABLE)*/
将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.
  例如:
  SELECT /*+ORDERED USE_NL(BSEMPMS)*/ BSDPTMS.DPT_NO,BSEMPMS.EMP_NO,BSEMPMS.EMP_NAM FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
23. /*+USE_MERGE(TABLE)*/
将指定的表与其他行源通过合并排序连接方式连接起来.
  例如:
  SELECT /*+USE_MERGE(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
24. /*+USE_HASH(TABLE)*/
  将指定的表与其他行源通过哈希连接方式连接起来.
  例如:
  SELECT /*+USE_HASH(BSEMPMS,BSDPTMS)*/ * FROM BSEMPMS,BSDPTMS WHERE BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;
25. /*+DRIVING_SITE(TABLE)*/
强制与ORACLE所选择的位置不同的表进行查询执行.
  例如:
  SELECT /*+DRIVING_SITE(DEPT)*/ * FROM BSEMPMS,DEPT@BSDPTMS WHERE BSEMPMS.DPT_NO=DEPT.DPT_NO;
26. /*+LEADING(TABLE)*/
将指定的表作为连接次序中的首表.
27. /*+CACHE(TABLE)*/
当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端
  例如:
  SELECT /*+FULL(BSEMPMS) CAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;
28. /*+NOCACHE(TABLE)*/
当进行全表扫描时,CACHE提示能够将表的检索块放置在缓冲区缓存中最近最少列表LRU的最近使用端
  例如:
  SELECT /*+FULL(BSEMPMS) NOCAHE(BSEMPMS) */ EMP_NAM FROM BSEMPMS;
29. /*+APPEND*/
  直接插入到表的最后,可以提高速度.
  insert /*+append*/ into test1 select * from test4 ;
30. /*+NOAPPEND*/
通过在插入语句生存期内停止并行模式来启动常规插入.
  insert /*+noappend*/ into test1 select * from test4 ;
31./*+ parallel(tablename,parallel-degree)*/
调整并行执行的目的是:最大地发挥硬件的能力。如果你有一个高性能的系统,有高优先的SQL语句在运行,则并行语句就可以使用所有有效的资源。Oracle可以执行的下面的并行:
       并行查询;
       并行DML(包括 INSERT, UPDATE, DELETE; APPEND提示,并行索引扫描);
       并行 DDL;
如果你的系统缺少以下这些特点,则并行可能不会有多大改善。
       对称多处理器(SMP), 集群或强大的并行系统;
       有效的I/O带宽;
       低利用的或闲置的CPU(如CPU使用小于30%);
       对附加的内存无效,如分类、哈西索引及I/O缓冲区等。
如果指定的并行度大于实际可用的资源(硬件资源>parallel_max_server>你指定的并行度),将会使用最大的可用资源的并行度来处理。
如果多人同时使用并行, sum(parallel_degree)>parallel_max_server ;可能产生等待使效率下降。
例子:
execute immediate 'alter session enable parallel dml'; --修改会话并行DML     
select /*+parallel(a,4)*/ * from table_name a      
select /*+parallel(a,8)*/ * from table_name a      
select /*+parallel(a,4) parallel(b,4) parallel(c,4)*/ a.*,b.*,c.* from table_name1 a,table_name2 b,table_name c      
insert /*+parallel(t,4)*/ into table_name t                      
insert /*+parallel(t,8)*/ into table_name t                      

/*+parallel(t,8)*/ 并行处理,一般为CPU的倍数如:4,8等,在执行类型SQL必须先运行:
alter session enable parallel dml   

分享到:
评论

相关推荐

    oracle HINTS用法

    下面将详细介绍部分常用的Oracle Hints。 #### 1. `/*+ ALL_ROWS */` 此Hint告诉Oracle数据库优化器返回所有行,即使这样做可能不是最高效的。这通常用于调试目的或当需要返回所有行时。 **示例:** ```sql SELECT...

    Oracle 常用 hints 说明

    hints 使用的好的話很好用。在进行sql执行过程中,由于有时候系统自动优化的方式并不是最优的。需要我们手工添加hint来提高查询效率。

    oracle sql 语句暗示 hints

    ### Oracle SQL 语句暗示 (Hints) 全面解析 #### 一、引言 在当前企业级应用环境中,为了实现成本控制与性能优化的目标,高效编写应用程序变得尤为重要。这不仅涉及程序的设计与实现,还包括运行时资源的有效利用...

    Oracle 中HINT的使用

    6. **Toad for Oracle分析与调优**:Toad是一款常用的Oracle数据库管理工具,它提供了性能分析和调优的功能。通过Toad,可以方便地查看和分析SQL执行计划,包括是否应用了HINT,以及HINT的效果如何。 7. **SQL性能...

    oracle的Parallel_并行技术案例详解

    并行 DDL 提供了 DBA 使用全部机器资源的能力,常用的 PDDL 有 Create Table As Select、Create Index、Alter Index Rebuild 等。 在使用 Parallel 技术时,需要注意系统的资源负载状况,以避免系统资源的过载和...

    Oracle系统调优办法

    - 使用合适的提示(hints),指导数据库选择更高效的执行计划。 ##### 3. 并行查询(Parallel Query) 并行查询允许Oracle数据库将一个查询任务分解为多个子任务,并行执行,从而大大提高查询速度。 **配置建议**...

    ORACLE数据字典

    roles、DBA_role_privs、DBA_profiles、DBA_outlines、DBA_out_line_hints、DBA_advisor_actions、DBA_advisor_log、DBA_advisor_parameters、DBA_advisor_rationale、DBA_advisor_recommentdations、DBA_scheduler_...

    oracle索引使用样例

    Oracle提供了多种提示(Hints)机制来控制查询执行计划: 1. **并行提示**:如`/*+ PARALLEL(INDEX_NAME, NUMBER_OF_PROCESSES) */`,用于指定并行处理的数量。 2. **索引提示**:如`/*+ INDEX(TABLE_NAME INDEX_...

    Oracle面试题收集

    6. 视图在Oracle中的创建可以用于增强安全性、简化数据展示、改善性能以及保存常用查询结果。 7. 设计数据库前,需理解客户需求、业务流程,创建数据字典和ER图表,并随着项目进展不断与客户沟通确认需求。 8. ...

    Oracle 执行计划PPT

    CBO通常更现代且更为常用,因为它利用了数据库中的统计信息来估算执行不同操作的成本,从而选择最优的执行路径。 执行计划包括对每个被访问表的访问路径以及表的连接顺序和相应的连接方法。访问路径描述了如何从...

    oracle-优化器详解.docx

    常用的 Hints 有: * FIRST_ROWS(n):n 为任意正整数。 * FIRST_ROWS * ALL_ROWS * CHOOSE * RULE CBO 如何对 SQL 做最快响应的优化 ------------------------------ 当 OPTIMIZER_MODE 被设置成 FIRST_ROWS_n、...

    Oracle SQL 参考手册

    2. **SELECT语句**:这是SQL中最常用的语句,用于从表中检索数据。它可以涉及多个表、列、条件和排序。在Oracle 10.1中,SELECT支持子查询、联接操作、聚合函数(如COUNT、SUM、AVG、MAX、MIN)以及GROUP BY和HAVING...

    Oracle9i优化器介绍

    常用的Hints包括`FIRST_ROWS(n)`、`FIRST_ROWS`、`ALL_ROWS`、`CHOOSE`和`RULE`。 #### 四、调整优化器目标的方法 - **实例级别**: 可以通过修改初始化参数文件来设置优化器的目标。例如,将`OPTIMIZER_MODE`设置...

    张利国oracle数据库查询ppt

    查询是SQL的基础,我们常用SELECT语句来获取所需的信息。SELECT语句的基本结构包括选择列(SELECT column1, column2...),指定表(FROM table_name),以及添加条件(WHERE condition)。例如,`SELECT * FROM ...

    oracle性能优化

    以下是一些常用的Oracle HINTs及其应用方法: 1. `/*+ALL_ROWS*/`:这个HINT指示Oracle优化器采用基于开销的方法,目标是最小化资源消耗,以获取最佳的吞吐量。这意味着优化器会尝试找到执行速度最快、系统资源利用...

    oracle执行计划

    1. **使用Oracle的HINTs** - HINTs是一种特殊的注释语法,用于指导Oracle优化器选择特定的执行计划。 - 例如: ```sql SELECT /*+ INDEX(emp) */ count(*) FROM emp; ``` - 可以使用HINTs来: - 改变表的关联...

    oracle官方mysql性能调优优化文档

    MySQL支持使用提示来指导优化器做出更好的决策,虽然这种方式并不常用。 ##### 2. 统计信息更新 - **定期更新统计信息**:确保MySQL优化器拥有最新的数据分布信息,这对于选择正确的执行计划至关重要。 ### 结论 ...

Global site tag (gtag.js) - Google Analytics