Oracle Hint

本文详细介绍了Oracle SQL的多种优化提示,包括缓存、索引策略、连接方式、并行执行等,旨在提升查询效率和系统性能。通过强制使用特定的执行计划,如INDEX_FFS、INDEX_ASC/Desc、ROWID等,可以显著改善查询性能。同时,也提到了并行执行的控制,如NO_PARALLEL和PARALLEL选项,以及如何根据需求调整响应时间和吞吐量。了解这些技巧对于优化数据库操作至关重要。
摘要由CSDN通过智能技术生成

1、/*+ result_cache */

设置缓存,特殊业务场景才可以使用

2、/*+ connect_by_filtering */

强制使用联合型的关联型(CONNECT BY WITH FILTERING) ,ps:详情

见:Orace SQL调优系列之执行计划学习笔记_Nicky's blog-CSDN博客

3、/*+ no_unnset */

双重否定表示肯定,即让子查询展开,让它嵌套(nest)在里面

4、/*+ index(表别名 索引名) */

强制索引,有时候可以使用,不过有时候可以关了基数反馈机制

5、/*+ INDEX_FFS(表别名 索引名) */

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

6、/*+ INDEX_DESC(表别名 索引名 ) */

表明对表选择索引降序的扫描方法

7、/*+ INDEX_ASC(表别名 索引名) */

表明对表选择索引升序的扫描方法

8、/*+ INDEX_COMBINE */

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

9、/*+ INDEX_JOIN(表别名 索引名) */

提示明确命令优化器使用索引作为访问路径

10、/*+ ADD_EQUAL 表别名 索引名1,索引名2,… */

提示明确进行执行规划的选择,将几个单列索引的扫描合起来 eg:

SELECT /*+INDEX_FFS(e IN_ENAME,IN_DEPTNO)*/
 *
  FROM emp e
 WHERE e.ename = 'CLERK'
   AND e.deptno = '20';

11、/*+ ordered use_nl(dept) */

强制使用联合型的关联型(NL),将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表

12、/*+ ALL_ROWS */

表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化

13、/+FIRST_ROWS/

表明对语句块选择基于开销的优化方法,并获得最佳响应时间,使资源消耗最小化

14、/*+ CHOOSE */

表明如果数据字典中有访问表的统计信息,将基于开销的优化方法,并获得最佳的吞吐量; 表明如果数据字典中没有访问表的统计信息,将基于规则开销的优化方法;

15、/*+ RULE */

表明对语句块选择基于规则的优化方法

16、/*+ FULL(TABLE) */

表明对表选择全局扫描的方法

17、/*+ ROWID(TABLE) */

提示明确表明对指定表根据ROWID进行访问

18、/*+ USE_HASH(TABLE) */

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

19、/*+ no_parallel */

强制SQL取消并行特性,并行特性有时候很影响系统性能,不要特意使用

20、/*+ parallel(表别名,并行度) */

并行度是数字的,一般并行特性是比较容易影响系统性能的,不能滥用,除非特殊场景

作用:能够强行使用自己设置的并行度来执行SQL,提高SQL执行效率。
开启/关闭:alter session enable/disable parallel dml

格式:/*+ parallel(table_short_name,cash_number) */

table_short_name:表的别名,不区分大小写。如果参数1的表别名与from后面表名的别名不一致,则parallel不会生效。
例如:select /*+ parallel(a,10) */ * from tb_user a1;
这里表别名是a1,但在parallel中使用了a,parallel就不生效,应该写为a1。
cash_number:并行度,是一个整型数字。数值的大小与执行效率有关,但并不是越大越好,因为它增大到一定值的时候,再继续增大效率也没有很明显的增大,同时也与占用资源也会增多。
parallel也可用于多表,格式:/*+ parallel(table_short_name1,cash_number1)(table_short_name2,cash_number2) ... */
例如:select /*+ parallel(a1,10)(b1,10) */ * from tb_user a1,tb_manager b1;

基本语法:select/insert/delete/update /*+ parallel(表别名,cash_number) */ 属性列 from 表名 表别名 ...

参考链接:
https://www.cnblogs.com/xingmeng/p/3303761.html
https://blog.csdn.net/andy31688/article/details/84460201
 

21、/*+ ROWID(表名) */

表明对指定表根据ROWID进行访问,ROWID是一个伪列,通过ROWID定位查找速度更快,可以用于SQL调优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值