Oracle Hints - 先知的提示
时间:2022-05-03
本文章向大家介绍Oracle Hints - 先知的提示,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在上周恩墨微信大讲堂的讨论中,几个有趣的视图跃入我们的视野,可以分享给大家。
在Oracle 11g中,新增的视图V$SQL_HINT记录了Oracle数据库中的可用Hint及其历史。
如果串起来,这几个视图的关系极大:V$SQL_FEATURE,V$SQL_FEATURE_HIERARCHY,V$SQL_HINT,通过这几个视图可以了解Oracle的SQL特性,继承关系,以及可用Hint及启用版本等。
v$sql_hint这个视图来自于底层的x$qksht表,其创建语句如下:
SELECT INST_ID,
TOKEN_QKSHTSYROW,
FID_QKSHTSYROW,
CLASS_QKSHTSYROW,
INVERSE_QKSHTSYROW,
LEVEL_QKSHTSYROW,
PROPS_QKSHTSYROW,
VERSION_QKSHTSYROW,
VERSION_OL_QKSHTSYROW,
CON_ID
FROM x$qksht
在11.2.0.3版本中,有273个Hint:
SQL> select count(*) from v$sql_hint;
COUNT(*)
----------
273
在不同版本引入的数量如下:
SQL> select substr(version,1,2),count(*) from v$sql_hint
2 group by substr(version,1,2);
SUBS COUNT(*)
---- ----------
11 66
10 80
9. 39
8. 88
在12c的版本中,查询统计如下。
SQL> select substr(version,1,2),count(*) from v$sql_hint
group by substr(version,1,2);
SUBS COUNT(*)
---- ----------
11 70
12 76
10 80
9. 39
8. 85
在V$SQL_HINT中还有一个有趣的字段:INVERSE - 显示一个提示的反向提示。通过这个对照关系也可以帮助我们更好的理解Hints。
比如,Shared的反向提示就有NOPARALLEL、NO_PARALLEL的变革历史。
SQL> select NAME,INVERSE,VERSION FROM v$sql_hint where INVERSE='SHARED';
NAME INVERSE VERSION
-------------------- ---------- -------------------------
NOPARALLEL SHARED 8.1.0
NO_PARALLEL SHARED 10.1.0.3
这些提示对应的SQL_FEATURE可以进一步的说明,NO_PARALLEL是QKSFM_CBO 相关:
SQL> select sql_feature,name,version FROM v$sql_hint where INVERSE='SHARED';
SQL_FEATURE NAME VERSION
------------------------------ -------------------- -------------------------
QKSFM_PARALLEL NOPARALLEL 8.1.0
QKSFM_CBO NO_PARALLEL 10.1.0.3
在V$SQL_HINT视图中,字段SQL_FEATURE显示了SQL特点信息,这个内容就可以从V$SQL_FEATURE中获得更详细的注释。
SQL> select SQL_FEATURE,DESCRIPTION from v$SQL_FEATURE where sql_feature='QKSFM_CBO';
SQL_FEATURE DESCRIPTION
-------------------- --------------------------------------------------
QKSFM_CBO SQL Cost Based Optimization
通过V$SQL_FEATURE_HIERARCHY 又可以将SQL特点的继承关系树构造出来:
SQL_FEATURE DESCRIPTION
------------------------------------------------------- --------------------------------------------------
ALL A Universal Feature
ANSI_REARCH ANSI rearcihtecture
COMPILATION SQL COMPILATION
CBO SQL Cost Based Optimization
ACCESS_PATH Query access path
AND_EQUAL Index and-equal access path
BITMAP_TREE Bitmap tree access path
FULL Full table scan
INDEX Index
INDEX_ASC Index (ascending)
INDEX_COMBINE Combine index for bitmap access
INDEX_DESC Use index (descending)
INDEX_FFS Index fast full scan
INDEX_JOIN Index join
INDEX_RS_ASC Index range scan
INDEX_RS_DESC Index range scan descending
INDEX_SS Index skip scan
INDEX_SS_ASC Index skip scan ascending
INDEX_SS_DESC Index skip scan descending
SORT_ELIM Sort Elimination Via Index
ADAPTIVE_PLAN Adaptive plans
AUTO_REOPT Automatic reoptimization
PERF_FEEDBACK Performance feedback
STATS_FEEDBACK Statistics feedback
BUSHY_JOIN bushy join
CBQT Cost Based Query Transformation
CBQT_OR_EXPANSION Cost Based OR Expansion
CVM Complex View Merging
DIST_PLCMT Distinct Placement
JOINFAC Join Factorization
JPPD Join Predicate Push Down
PLACE_GROUP_BY Group-By Placement
PULL_PRED pull predicates
STAR_TRANS Star Transformation
TABLE_LOOKUP_BY_NL Table Lookup By Nested Loop
TABLE_EXPANSION Table Expansion
UNNEST unnest query block
VECTOR_AGG Vector Transformation
CURSOR_SHARING Cursor sharing
DML DML
JOIN_METHOD Join methods
USE_CUBE Cube join
USE_HASH Hash join
USE_MERGE Sort-merge join
USE_MERGE_CARTESIAN Merge join cartesian
USE_NL Nested-loop join
USE_NL_WITH_INDEX Nested-loop index join
JOIN_ORDER Join order
OPT_MODE Optimizer mode
ALL_ROWS All rows (optimizer mode)
CHOOSE Choose (optimizer mode)
FIRST_ROWS First rows (optimizer mode)
OR_EXPAND OR expansion
OUTLINE Outlines
PARTIAL_JOIN Partial Join Evaluation
PARTITION Partition
PQ Parallel Query
PARALLEL Parallel table
PQ_DISTRIBUTE PQ Distribution method
PQ_MAP PQ slave mapper
PQ_REPLICATE PQ replicate small tables
PX_JOIN_FILTER Bloom filtering for joins
STAR_TRANS Star Transformation
TABLE_LOOKUP_BY_NL Table Lookup By Nested Loop
STATS Optimizer statistics
CARDINALITY Cardinality computation
COLUMN_STATS Basic column statistics
CPU_COSTING CPU costing
DBMS_STATS Statistics gathered by DBMS_STATS
DYNAMIC_SAMPLING Dynamic sampling
DYNAMIC_SAMPLING_EST_CDN Estimate CDN using dynamic sampling
GATHER_PLAN_STATISTICS Gather plan statistics
INDEX_STATS Basic index statistics
OPT_ESTIMATE Optimizer estimates
TABLE_STATS Basic table statistics
DATA_SECURITY_REWRITE XS Data Security Rewrite
QUERY_REWRITE query rewrite with materialized views
RBO SQL Rule Based Optimization
SQL_CODE_GENERATOR SQL Code Generator
SQL_MANAGEMENT_BASE SQL Management base
SQL_PLAN_MANAGEMENT SQL Plan Management
TRANSFORMATION Query Transformation
CBQT Cost Based Query Transformation
CBQT_OR_EXPANSION Cost Based OR Expansion
CVM Complex View Merging
DIST_PLCMT Distinct Placement
JOINFAC Join Factorization
JPPD Join Predicate Push Down
PLACE_GROUP_BY Group-By Placement
PULL_PRED pull predicates
STAR_TRANS Star Transformation
TABLE_LOOKUP_BY_NL Table Lookup By Nested Loop
TABLE_EXPANSION Table Expansion
UNNEST unnest query block
VECTOR_AGG Vector Transformation
CLUSTER_BY_ROWID Cluster By Rowid Transformation
GROUPING_SET_XFORM Grouping Set Transformation
HEURISTIC Heuristic Query Transformation
CNT Count(col) to count(*)
COALESCE_SQ coalesce subqueries
CSE Common Sub-Expression Elimination
CVM Complex View Merging
DECORRELATE View Decorrelation
ELIMINATE_SQ eliminate subqueries
FILTER_PUSH_PRED Push filter predicates
FULL_OUTER_JOIN_TO_OUTER Join Conversion
GBYEL Group-by Elimination
JPPD Join Predicate Push Down
OBYE Order-by Elimination
OLD_PUSH_PRED Old push predicate algorithm (pre-10.1.0.3)
OUTER_JOIN_TO_ANTI Join Conversion
OUTER_JOIN_TO_INNER Join Conversion
PRED_MOVE_AROUND Predicate move around
SET_TO_JOIN Transform set operations to joins
SVM Simple View Merging
TABLE_ELIM Table Elimination
UNNEST unnest query block
USE_CONCAT Or-optimization
XML_REWRITE XML Rewrite
CHECK_ACL_REWRITE Check ACL Rewrite
COST_XML_QUERY_REWRITE Cost Based XML Query Rewrite
XMLINDEX_REWRITE XMLIndex Rewrite
ZONEMAP Zone Maps
DDL DDL
EXECUTION SQL EXECUTION
STATS_ONLOAD Statistics on load
VECTOR_PROC Vector Processing
WINDOW_CONSOLIDATOR WINDOW CONSOLIDATOR
Oracle的数据库内部功能自解析越来越完善和全面了。
- spark sql编程之实现合并Parquet格式的DataFrame的schema
- Oracle压缩黑科技(一)—基础表压缩
- 12 条用于 Linux 的 MySQL/MariaDB 安全最佳实践
- hdu----(4545)魔法串(LCS)
- Oracle压缩黑科技(二)—压缩数据的修改
- 在Pivotal Web Service上发布Spring Boot应用
- hdu---(1325)Is It A Tree?(并查集)
- spark2 sql编程样例:sql操作
- hdu----(1599)最大子矩阵(几何/dp)
- Go语言简单的TCP编程
- hdu---(1054)Strategic Game(最小覆盖边)
- Swagger Starter 1.4.0发布:新增swagger功能开源与全局参数的配置。
- Go语言语法汇总
- 整理的一些模版LCS(连续和非连续)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java 新特性前瞻:封印类
- 每天手撕一道算法题-130. 被围绕的区域
- C#实现前向最大匹、字典树(分词、检索)
- Tomcat 中文乱码,设置UTF-8
- 从零搭建Spring Boot脚手架(4):手写Mybatis通用Mapper
- IDEA将Maven项目中指定文件夹下的xml等文件编译进classes
- 数据误操作,教你使用ApexSQLLog工具从 SQLServer日志恢复数据!
- 从零搭建Spring Boot脚手架(5):整合 Mybatis Plus
- SQL Server数据库阻塞,死锁查询
- 如何优雅地写出大规模线性规划的对偶
- 数据库char varchar nchar nvarchar,编码Unicode,UTF8,GBK等,Sql语句中文前为什么加N(一次线上数据存储乱码排查)
- [Maven][maven-shade-plugin]告警[WARNING] maven-shade-plugin has detected that some class files are pre
- asp.net core 3.1多种身份验证方案,cookie和jwt混合认证授权
- 只知道java反射,宁知道内省吗?
- JDK1.8新特性(七):默认方法,真香,开动!接口?我要升级!!