-
sql语句大全之SQL语句中的优化提示Hints的总结
会话级:
ALTER SESSION SET optimizer_goal= rule | first_rows | all_rows | choose ;<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
修改会话级的优化提示。
Hints提示:
- 提示将使语句强制执行基于成本的优化器 (除了提示RULE外)- 在hints中使用表名的别名
- 确保表都被分析过了
语法: /*+ HINT HINT ... */
(在PLSQL中, '+'与hint的第一个字符之间的空格是很重要的
/*+ ALL_ROWS */ 是正确的,但/*+ALL_ROWS */ 是错误的)
1 Optimizer Mode优化模式:
FIRST_ROWS, ALL_ROWS |
Force CBO first rows or all rows |
RULE |
Force Rule if possible |
ORDERED |
按照在FROM 子句中的先后顺序访问表 |
ORDERED_PREDICATES |
Use in the WHERE clause to apply predicates in the order that they appear. Does not apply predicate evaluation on index keys |
2 子查询或视图:
PUSH_SUBQ |
Causes all subqueries in a query block to be executed at the earliest possible time. Normally subqueries are executed as the last is applied is outerjoined or remote or joined with a merge join. (>=7.2) |
NO_MERGE(v) |
Use this hint in a VIEW to PREVENT it being merged into the parent query. (>=7.2) or use NO_MERGE(v) in parent query block to prevent view V being merged |
MERGE(v) |
Do merge view V |
MERGE_AJ(v) } |
Put hint in a NOT IN subquery to perform (>=7.3) |
HASH_AJ(v) } |
SMJ anti-join or hash anti-join. (>=7.3) Eg: SELECT .. WHERE deptno is not null AND deptno NOT IN(SELECT /*+ HASH_AJ */ deptno ...) |
HASH_SJ(v) } |
Transform EXISTS subquery into HASH or MERGE |
MERGE_SJ(v) } |
semi-join to access "v" |
PUSH_JOIN_PRED(v) |
Push join predicates into view V |
NO_PUSH_JOIN_PRED(v) |
Do NOT push join predicates |
3 读取方式:
FULL(tab) |
对表实行全表扫描(FTS) |
CACHE(tab) |
If table within <Parameter:CACHE_SIZE_THRESHOLD> treat as if it had the CACHE option set. See <Parameter:CACHE_SIZE_THRESHOLD>. Only applies if FTS used. |
NOCACHE(tab) |
Do not cache table even if it has CACHE option set. Only relevant for FTS |
ROWID(tab) |
Access tab by ROWID directly SELECT /*+ ROWID( table ) */ ... FROM tab WHERE ROWID between '&1' and '&2'; |
CLUSTER(tab) |
Use cluster scan to access 'tab' |
HASH(tab) |
使用hash scan来访问表 |
INDEX( tab ndex ) |
使用索引来访问表 |
INDEX_ASC( tab ndex ) |
Use 'index' to access 'tab' for range scan. |
INDEX_DESC( tab ndex ) |
Use descending index range scan (Join problems pre 7.3) |
INDEX_FFS( tab index) |
Index fast full scan - rather than FTS. |
INDEX_COMBINE( tab i1.. i5 ) |
Try to use some boolean combination of bitmap index/s i1,i2 etc |
AND_EQUAL(tab i1.. i5 ) |
Merge scans of 2 to 5 single column indexes. |
USE_CONCAT |
Use concatenation (Union All) for OR (or IN) statements. (>=7.2). See(7.2 requires <Event:10078>, 7.3 no hint req) |
NO_EXPAND |
Do not perform OR-expansion (Ie: Do not use Concatenation). |
DRIVING_SITE(table) |
Forces query execution to be done at the site where "table" resides |
4 连接:
USE_NL(tab) |
Use table 'tab' as the driving table in a Nested Loops join. If the driving row source is a combination of tables name one of the tables in the inner join and the NL should drive off the entire row-source. Does not work unless accompanied by an ORDERED hint. |
USE_MERGE(tab..) |
Use 'tab' as the driving table in a sort-merge join. Does not work unless accompanied by an ORDERED hint. |
USE_HASH(tab1 tab2) |
Join each specified table with another row source with a hash join. 'tab1' is joined to previous row source using a hash join. (>=7.3) |
STAR |
Force a star query plan if possible. A star plan has the largest table in the query last in the join order and joins it with a nested loops join on a concatenated index. The STAR hint applies when there are at least 3 tables and the large table's concatenated index has at least 3 columns and there are no conflicting access or join method hints. (>=7.3) |
STAR_TRANSFORMATION |
Use best plan containing a STAR transformation(if there is one) |
5 并行查询选项:
PARALLEL ( table, <degree> [, <instances>] ) |
Use parallel degree / instances as specified |
PARALLEL_INDEX(table, [ index, [ degree [,instances] ] ] ) |
Parallel range scan for partitioned index |
PQ_DISTRIBUTE(tab,out,in) |
How to distribute rows from tab in a PQ(out/in may be HASH/NONE/BROADCAST/PARTITION) |
NOPARALLEL(table) |
No parallel on "table" |
NOPARALLEL_INDEX(table [,index]) |
|
6 Miscellaneous
APPEND |
Only valid for INSERT .. SELECT. Allows INSERT to work like direct load or to perform parallel insert. |
NOAPPEND |
Do not use INSERT APPEND functionality |
REWRITE(v1[,v2]) |
8.1+ With a view list use eligible materialized view Without view list use any eligible MV |
NOREWRITE |
8.1+ Do not rewrite the query |
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式