Oracle复习部分记录

GuassDB,Oracle,Postgresql 适用的hint说明

一、在使用with as 短语时,使用materialize 会生产临时表,执行完成后,PGA会将其清除。

materialize

二、pq_distribute 表示在并行过程中,按照并行对标划分多少个分区,a分区与b分区如何进行关联并行查询。可能是a广播到b的每个分区进行关联合并。

详细说明URL:https://www.cnblogs.com/kakaisgood/p/13181352.html

use_hash(a,b) parallel(a,6),parallel(b,6) pq_distribute

三、指定优化器使用的表的索引

index(tablename index_name)

alter session set '_optimizer_push_pred_cost_based'=false 禁止谓词推入

alter session set '_push_join_predicate'=false 禁止非常量的谓词推入

四、关闭位图索引转换

alter session set '_b_tree_bitmap_plans'=false

/+ opt_param('_b_tree_bitmap_plans','false')/

五、dblink 同时查询本地表与远程表,两种处理方式:第一种是将远程数据表数据取回本地,然后跟本地表进行关联查询,获取最终结果。第二种是将本地表数据传到远程库中与远程表进行关联查询,在将关联结果取回。r便是remote的表名称,l表示local的表名称

主要用于减少网络传输,但是对与DDL,DML driving_sit()的hint的提示是无效的。

driving_sit® #如果本地表数据量较小,则用r代替远程的表名称,表示将本地表数据通过网络传输到远程库表中进行关联后,获取最终结果集。

driving_sit(l) #如果远程表数据量较小,则用l代替本地的表名称,表示将远程表数据通过网络传输到本地库表中进行关联查询。

六、禁用笛卡尔积连接,使用use_hash() 指定连接表之间的where条件通过hash值进行匹配关联

use_hash(a,b) opt_param('_optimizer_mjc_enabled','false')

七、视图合并

merge() 存在A,B,C。B与C组成视图,然后A跟BC视图进行结果集关联。如果进行视图合并,则根据where条件,可能会出现AB进行先关联,做HASH JOIN操作,然后结果集与C进行关联。可能在执行计划中,不会出现view的字样。

no_merge() 存在A,B,C。B与C组成视图,然后A跟BC视图进行结果集关联。

八、延迟进行聚合运算

lazyagg 在子查询中有group by 且外部还存在group by的情况下,子查询中的表很大,外部的表相比较小的情况下。使用该特性,会消除子查询中的聚合运算,先关联在group by。

九、配合leading() 指定d为被驱动表,e为驱动表。指定优化器将我们指定的多个表作为被驱动表与其它表或结果集或排序合并连接

use_merge(e,d) leading(d) index(d) index(e index_name)

禁止笛卡尔积

opt_param('_optimizer_mjc_enabled',false)

十、存在nesting loop的情况下,进一步控制表关联的顺序,leading(emp)先对emp表进行查询并与dept先进行关联操作

use_nl(emp,dept) leading(emp)

十一、将主查询表中的where条件下推到where子查询,相当于通过主查询表中的where条件减少了子查询中的扫描行数。如果A.r=1 and (A join B),则可能存在先A.r=1 与(AjoinB)的结果集进行聚合。magicset则先A.r=1减少结果集后,在进行(AjoinB),进一步减少数据集,采用递归的方式最后得出结果。

magicset

十二、将where,having非相关子查询提升和winmagic重写优化,相当于将子查询提升为join等方式

enable_sublink_pullup_enhanced

十三、将标量子查询改成为left join 标量子查询是指只返回一行一列的查询

Intargetlist

十四、谓词推入,将条件推入到子查询中,将过滤条件尽早的推入到子查询中,减少内部查询返回的数据量

predpushnormal,predpush,predpushforce

十五、禁止子查询提升,相当于对子查询加/+no_expand /

disable_pullup_expr_sublink

十六、提升无agg的where子查询,表示没有agg聚合函数(比如 sum函数)的子查询,指示优化器对子查询的条件进行唯一值校验,保证对于每个条件只有一行输出

uniquecheck

十七、消除where子查询中的distinct和group by

remove_redundant_distinct_group_by

十八、列裁剪消除子查询中冗余的投影列,只保留在查询过程中处理的有效数据列(被需要关联的列),减少I/O操作和内存的使用

column_pruner

十九、子查询展开

semi-join 半连接

anti-join 反连接

unnest与nounnest

nounnest 子查询不展开的意思是当子查询在最后一步执行,对应执行计划为FILTER,过滤的方式进行匹配。

unnest 子查询展开的意思是会将子查询里面的整体结果集和外部的表做hash join或HASH JOIN SEMI的连接。

相关推荐
技术卷1 小时前
详解力扣高频SQL50题之610. 判断三角形【简单】
sql·leetcode·oracle
betazhou1 小时前
MySQL ROUTER安装部署
android·数据库·mysql·adb·mgr·mysql router
中东大鹅2 小时前
Mybatis Plus 多数据源
java·数据库·spring boot·后端·mybatis
一枚小小程序员哈2 小时前
springboot基于Java与MySQL库的健身俱乐部管理系统设计与实现
数据库·spring boot·mysql·spring·java-ee·intellij-idea
Antonio9153 小时前
【Redis】 Redis 基础命令和原理
数据库·redis·缓存
非优秀程序员3 小时前
未来的编程将会是什么样子?从面向对象转为面向业务数据!!
数据库·架构
技术卷3 小时前
详解力扣高频SQL50题之619. 只出现一次的最大数字【简单】
sql·leetcode·oracle
老华带你飞4 小时前
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
java·数据库·微信小程序·小程序·论文·毕设·口腔小程序
hqxstudying4 小时前
J2EE模式---服务层模式
java·数据库·后端·spring·oracle·java-ee
Yu_Lijing4 小时前
MySQL进阶学习与初阶复习第四天
数据库·学习·mysql