hint之qb_name
该hint用于子查询(query_block)
很多的情况下,如果子查询共用相同的别名(alias), 可以通过设定不同的qb_name分别标识子查询。
实例如下
SQL*Plus: Release 10.2.0.1.0 – Production on Sat Dec 19 22:16:13 2009
。。。。。
43@dyl@TEST>EXPLAIN PLAN SET statement_id = ‘qb_name’
FOR
SELECT /*+ QB_NAME(outer) */
e.ename
, e.sal
FROM (
SELECT /*+ QB_NAME(inline_view) */
*
FROM emp e
WHERE e.sal > 300
AND e.deptno IN ( SELECT /*+ QB_NAME(dept_subquery) */ d.deptno
FROM dept d
WHERE d.dname IN (‘SALES’,'ACCOUNTING’) )
) e;
Explained.
Elapsed: 00:00:00.17
使用10g下的DBMS_XPLAN.DISPLAY,注意必须使用ALL参数,才能看得到自定义的query_block name
43@dyl@TEST>SELECT plan_table_output
FROM TABLE(DBMS_XPLAN.DISPLAY(‘PLAN_TABLE’,'qb_name’,’ALL‘));
PLAN_TABLE_OUTPUT
——————————————————————————————————————————————————
Plan hash value: 351108634
—————————————————————————————-
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
—————————————————————————————-
| 0 | SELECT STATEMENT | | 9 | 234 | 4 (0)| 00:00:01 |
| 1 | NESTED LOOPS | | 9 | 234 | 4 (0)| 00:00:01 |
|* 2 | TABLE ACCESS FULL | EMP | 14 | 182 | 3 (0)| 00:00:01 |
|* 3 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 13 | 1 (0)| 00:00:01 |
|* 4 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| 00:00:01 |
—————————————————————————————-
Query Block Name / Object Alias (identified by operation id):
————————————————————-
1 – SEL$B9DAFA34
2 – SEL$B9DAFA34 / E@INLINE_VIEW
3 – SEL$B9DAFA34 / D@DEPT_SUBQUERY
4 – SEL$B9DAFA34 / D@DEPT_SUBQUERY
Predicate Information (identified by operation id):
—————————————————
2 – filter(“E”.”SAL”>300)
3 – filter(“D”.”DNAME”=’ACCOUNTING’ OR “D”.”DNAME”=’SALES’)
4 – access(“E”.”DEPTNO”=”D”.”DEPTNO”)
Column Projection Information (identified by operation id):
———————————————————–
1 – (#keys=0) “E”.”ENAME”[VARCHAR2,10], “E”.”SAL”[NUMBER,22]
2 – “E”.”ENAME”[VARCHAR2,10], “E”.”SAL”[NUMBER,22], “E”.”DEPTNO”[NUMBER,22]
4 – “D”.ROWID[ROWID,10]
33 rows selected.
Elapsed: 00:00:00.05
在定义了qb_name之后最大的好处就是再设定其他hint时,可以指定qb_name,
语法相对更清晰一些,在非常复杂的select语句时不易加错hint。
43@dyl@TEST>EXPLAIN PLAN SET statement_id = ‘qb_hints’
FOR
SELECT /*+ QB_NAME(outer) FULL(@dept_subquery d) */
e.ename
, e.sal
FROM (
SELECT /*+ QB_NAME(inline_view) */
*
FROM emp e
WHERE e.sal > 300
AND e.deptno IN ( SELECT /*+ QB_NAME(dept_subquery) */ d.deptno
FROM dept d
WHERE d.dname IN (‘SALES’,'ACCOUNTING’) )
) e;
Explained.
Elapsed: 00:00:00.01
43@dyl@TEST>SELECT plan_table_output
FROM TABLE(DBMS_XPLAN.DISPLAY(‘PLAN_TABLE’,'qb_hints’,'ALL’));
PLAN_TABLE_OUTPUT
——————————————————————————————————————————————————
Plan hash value: 615168685
—————————————————————————
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
—————————————————————————
| 0 | SELECT STATEMENT | | 9 | 234 | 7 (15)| 00:00:01 |
|* 1 | HASH JOIN | | 9 | 234 | 7 (15)| 00:00:01 |
|* 2 | TABLE ACCESS FULL| DEPT | 2 | 26 | 3 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| EMP | 14 | 182 | 3 (0)| 00:00:01 |
—————————————————————————
Query Block Name / Object Alias (identified by operation id):
————————————————————-
1 – SEL$B9DAFA34
2 – SEL$B9DAFA34 / D@DEPT_SUBQUERY
3 – SEL$B9DAFA34 / E@INLINE_VIEW
Predicate Information (identified by operation id):
—————————————————
1 – access(“E”.”DEPTNO”=”D”.”DEPTNO”)
2 – filter(“D”.”DNAME”=’ACCOUNTING’ OR “D”.”DNAME”=’SALES’)
3 – filter(“E”.”SAL”>300)
Column Projection Information (identified by operation id):
———————————————————–
1 – (#keys=1) “E”.”ENAME”[VARCHAR2,10], “E”.”SAL”[NUMBER,22]
2 – “D”.”DEPTNO”[NUMBER,22]
3 – “E”.”ENAME”[VARCHAR2,10], “E”.”SAL”[NUMBER,22],
“E”.”DEPTNO”[NUMBER,22]
32 rows selected.
hint之qb_name的更多相关文章
- Oracle三组难缠的hint no_unnest/unnest,push_subq,push_pred--平展化(转)
经常有人把这三个hint搞混,主如果因为对三种重写道理不清楚.特总结如下.(实验景象为10204)1. no_unnest, unnestunnest我们称为对子查询展开,顾名思义,就是别让子查询孤单 ...
- [转]Oracle中Hint深入理解
原文地址:http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明 ...
- 品味性能之道<十>:Oracle Hint
Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式. 因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Ora ...
- Oracle 常见hint
Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...
- Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明 ...
- Oracle中Hint深入理解
Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...
- 【DBAplus】SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
原创 2016-09-12 韩锋 作者介绍 韩锋,宜信技术研发中心数据库架构师.精通多种关系型数据库,曾任职于当当网.TOM在线等公司,曾任多家公司首席DBA.数据库架构师等职,多年一线数据库架构. ...
- SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
一.提示(Hint)概述 1为什么引入Hint? Hint是Oracle数据库中很有特色的一个功能,是很多DBA优化中经常采用的一个手段.那为什么Oracle会考虑引入优化器呢?基于代价的优化器是很聪 ...
- oracle中hint 详解
Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担.但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比. 此时就需要DBA进行 ...
随机推荐
- webstrom git 版本控制
1.配置 2.用法
- 2.2 linux中的信号分析
信号: 信号是UNIX系统响应某些状况而产生的事件,进程在接收到信号时会采取相应的行动. 信号是因为某些错误条件而产生的,比如内存段冲突.浮点处理器错误或者非法指令等. 信号是在软件层次上对中断的一种 ...
- arcgis-tomcat-cors
C:\Program Files\ArcGIS\Server\framework\runtime\tomcat\webapps\arcgis#rest\WEB-INF\ (1)添加cors-filte ...
- 很全面的WinRAR实用技巧系列 - imsoft.cnblogs
WinRAR也可以管理我的桌面时间长了,桌面上堆的东西实在太多,平时该如何管理呢?安装了WinRAR的朋友可以请它来帮忙,用它管理清除无用的桌面文件或图标. 以XP系统为例,系统所在目录是“c:\wi ...
- Sublime配置VI插件后 快捷键总结
Vi编辑器快捷键 命令行模式: yy 复制当前行 yy5 复制向下5行 p 粘贴(注意粘贴到最后时候留一个换行符) p5 粘贴5次 dd 删除一行,剪切一行 G 最后一行 1G 第一行 ...
- poj-1170 (状态压缩形式下的完全背包)
#include <iostream> #include <algorithm> #include <cstring> using namespace std; ; ...
- js三级联动
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- 51Nod 1079:中国剩余定理
1079 中国剩余定理 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 一个正整数K,给出K Mod 一些质数的结果,求符合条件的最小的K.例如,K % ...
- Maven Dependency错误——下载失败问题解决方案
问题描述: The container 'Maven Dependencies' references non existing library '${groupid}/${artifactid}-$ ...
- treeql 基于rest 标准的接口开发协议
treeql 可以让我们按照数据库的关系模型,生成一个tree 模型的json 数据,基于rest 标准, 从设计上,来说还是很不错的,但是从长远发展来说graphql 应该会更好,也有相关的比较 参 ...