<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;
分享到:
相关推荐
SQL 语句优化方法 30 例 SQL 语句优化是一种非常重要的数据库优化技术,目的是为了提高数据库的查询效率,减少查询时间,提高系统的整体性能。在 SQL 语句优化过程中,我们经常会用到 hint,今天我们将总结一下在 ...
文章《SQL语句优化方法分析与探讨》中,作者详细阐述了SQL语句优化的五大方面:定位、分析、调整、优化和技巧。这些方法都来源于实际应用过程中的探索和总结,目的是为了帮助开发者和数据库管理员更有效地优化SQL...
本文主要探讨了基于索引的SQL语句优化方法,分析了SQL语句的执行过程以及优化器是如何利用索引来优化查询的。同时,文章还总结了建立索引的策略,并讨论了如何有效地使用索引来优化SQL语句。 首先,文章指出了在SQL...
作者龚维荣、周顺平、万波在文章中结合自己的实际工作经验,对Oracle数据库基于索引的SQL语句优化方法进行了初步探讨,提出了建立必要索引的建议和方法,并分享了一些简单实用的优化技巧。这些技巧如果能够在数据库...
sql语句优化
SQL语句优化是数据库管理中一项至关重要的工作,其目的是提升查询效率,减少查询时间,降低资源消耗。本文将从多个维度分析SQL语句的优化方法,以供读者参考和实践。 首先,优化SQL语句的前提是了解当前SQL的执行...
SQL语句最优化SQL语句最优化SQL语句最优化SQL语句最优化
在深入探讨如何通过编写SQL语句来优化Oracle数据库的数据访问之前,...随着数据库技术的不断进步,SQL语句优化方法也在不断更新,因此,跟上最新的技术发展,掌握最新的数据库优化技巧,对于数据库管理员来说至关重要。
10. SQL语句优化的技术手段:技术手段包括但不限于使用子查询优化、使用JOIN代替子查询、避免SELECT *、使用更有效的查询方法(如IN代替OR)、利用数据库提供的存储过程和函数减少网络往返次数等。 11. 经验与实践...
#### SQL语句优化方法 在进行SQL语句优化时,可以从以下方面着手: - 理解执行计划:通过分析SQL语句的执行计划,识别可能存在的性能瓶颈。 - 创建索引:合理地创建和使用索引可以显著提高查询效率,减少数据块调用...
3. **建议与改写**:自动提供优化建议,包括修改SQL语句结构、创建或调整索引、优化连接方式等,有时甚至可以直接改写SQL语句以提高性能。 4. **历史记录与报告**:记录SQL语句的执行历史,生成性能报告,便于跟踪...
新一代智能SQL语句优化技术是数据库管理领域的重要进步,它主要针对的是提升数据库应用程序的性能。SQL(结构化查询语言)作为访问和更新数据的主要工具,其性能优化对于整体系统效率有着重大影响。通常,SQL语句...
#### 三、SQL语句优化的方法 ##### 1. SQL编码的定位 - **定位问题SQL语句**:通过监控工具,比如`v$sqlarea`视图,可以找到那些占用大量内存或磁盘I/O的SQL语句。例如,可以使用如下SQL语句来找出磁盘读取次数...
本文将深入探讨SQL语句优化,包括优化器的工作原理、优化工具、数据访问方法以及如何收集统计信息来辅助优化。 首先,Oracle的优化器(Optimizer)是一种内部机制,它负责分析SQL语句并确定执行查询的最佳路径。...
以下是一些针对SQL语句优化的重要原则和方法: 1. **利用索引**:索引是提高查询速度的关键。如果没有索引或者没有正确使用索引,查询将遍历整个表,造成性能下降。应根据查询条件建立合适的索引,避免在有限值的列...
### SQL语句优化建议 #### 重要性与挑战 SQL语句优化是数据库管理与维护中的关键环节,尤其在处理大规模数据集时显得至关重要。优化不仅能够显著提升查询效率,减少资源消耗,还能改善用户体验,确保系统的稳定性...
便于Java入门人员交流学习。可以深刻理解该语言的常用API。帮助初学者尽快入门。
sql 语句优化 SQL Server数据库查询速度慢的原因有很多
最后,文章总结了几种常用的SQL语句优化方法,其中合理使用索引是提高查询效率的重要手段之一。索引是数据库中用于提高查询效率的关键数据结构。索引的使用应恰到好处,其使用原则包括: 1. 在经常进行连接操作的列...