SQL句子的优化办法ITeye - 威尼斯人

SQL句子的优化办法ITeye

2019年03月26日15时33分37秒 | 作者: 智晖 | 标签: 优化,例如,句子 | 浏览: 1423

1 /*+ALL_ROWS*/
标明对句子块挑选依据开支的优化方法,并取得最佳吞吐量,使资源耗费最小化.
例如:
SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=CCBZZP;

2 . /*+FIRST_ROWS*/
标明对句子块挑选依据开支的优化方法,并取得最佳呼应时刻,使资源耗费最小化.
例如:
SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE  EMP_NO=CCBZZP;

3 . /*+CHOOSE*/
标明假如数据字典中有拜访表的计算信息,将依据开支的优化方法,并取得最佳的吞吐量;
标明假如数据字典中没有拜访表的计算信息,将依据规矩开支的优化方法;
例如:
SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=CCBZZP;

4 . /*+RULE*/
标明对句子块挑选依据规矩的优化方法.
例如:
SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO=CCBZZP; 

5 . /*+FULL(TABLE)*/
标明对表挑选大局扫描的方法.
例如:
SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO=CCBZZP;

6 . /*+ROWID(TABLE)*/
提示清晰标明对指定表依据ROWID进行拜访.
例如:
SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID =AAAAAAAAAAAAAA
  AND EMP_NO=CCBZZP;

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=CCBZZP;

10 . /*+INDEX_COMBINE*/
为指定表挑选位图拜访路经,假如INDEX_COMBINE中没有供给作为参数的索引,将挑选出位图索引的
布尔组合方法.
例如:
SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS
WHERE SAL 5000000 AND HIREDATE SYSDATE;

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=CCBZZP;

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=CCBZZP 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 (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;
 
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 ;
 
insert /*+append */ into emp nologging

30 . /*+NOAPPEND*/
经过在刺进句子生计期内中止并行形式来发动惯例刺进.

insert /*+noappend*/ into test1  select * from test4 ;

31 .parallel direct-load insert
sql alter session enable parallel dml;
sql insert /*+parallel(emp,2) */ into emp nologging
sql select * from emp_old;

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章