Oracle关联机制-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

1. 关联机制

1.1 循环嵌套关联 ( NESTED LOOPS JOIN) :大小表关联

1.2 哈希关联 (HASH JOIN )两张大表

1.3 排序合并关联 (SORT MERGE JOIN)有索引的两张表.

2. HINTS (提示符) 优化

--高水位线


1. 关联机制
1.1 循环嵌套关联 ( NESTED LOOPS JOIN) :大小表关联

首先两个表关联后,小表为内侧表,大表作为外侧表,确定外侧表和内侧表的连接后,将外侧表作为驱动表,内侧表作为被驱动表,根据驱动表的连接条件进行筛选.最后获得驱动表的数据合集.

运用场景: 大小表关联,被驱动表的数据不能超过内存,或者直接使用索引得到匹配的记录.

小表驱动大表:

 FOR (20条数据)
 FOR  { 20 W 条数据 }
   
 --小表在外面 ,表连接只需20次
 
大表驱动小表: 
 FOR (202条数据)
 FOR  { 20 条数据 }
 
-- 大的在外面的话,表连接需要20w次
总结: 小表驱动大表的主要目的就是减少表的连接次数,加快查询速度.

1.2 哈希关联 (HASH JOIN )两张大表

-- 两张数据相差不大,并且还是等值关联.在关联的时候,会先对关联字段做哈希值计算,计算完,再拿哈希值匹配.

1.3 排序合并关联 (SORT MERGE JOIN)有索引的两张表.

-- 先对关联字段做一个排序,再拿排好顺序的数据做关联,适合有索引的两张表.如果有索引就可以排除排序这样可以大大提高这种连接操作的连接速度特别是对于较大的表。

2. HINTS (提示符) 优化

1、/*+ PARALLEL(表名1,并行数)[(表名2,并行数)……] */ --指定开启多少个并行|并发一般为2、4、8……
2、/*+ INDEX(表名,索引名) */ --指定索引扫描
3、/*+ FULL(表名) */ --指定全表扫描
4、/*+ USE_NL(表名1表名2) */ --指定用NESTED LOOP连接
5、/*+ USE_HASH(表名1表名2) */ --指定用HASH连接
6、/*+ USE_MERGE(表名1表名2) */ --指定用SORT MERGE JOIN
7、/*+ LEADING(表名1表名2) */ --指定表1作为被驱动表
8、/*+ APPEND */ --数据直接插入到高水位上面(与insert连用)直接往后面插无视前面的水位置

 案例

-- 优化器自动选择的是 SORT MERGE关联

SELECT
* 
FROM EMP E
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO; 

--根据提示符选择的关联方式

SELECT /*+ USE_NL(E, D) LEADING(D, E) */ 
* 
FROM EMP E
JOIN DEPT D
ON E.DEPTNO = D.DEPTNO;
--高水位线

-- 在使用 DELETE 删除数据时,会因为碎片问题,存在高水位线
-- 高水位线存在的话,会导致后面的数据插入性能降低
-- 解决高水位的方法:

insert /*+ APPEND */  into 表名

--对数据进行备份,使用 TRUNCATE TABLE 方式 干掉数据,然后重新导入数据

-- 截断表

TRUNCATE TABLE 

CREATE TABLE B 
AS 
SELECT * FROM A 
-- 不会复制水位线

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: oracle