达梦数据库系列—41.表连接方式

news/2024/9/23 9:26:33/

目录

连接方式

NEST LOOP(嵌套循环连接)

HASH JOIN(哈希连接)

MERGE JOIN(排序归并连接)


连接方式

创建测试表:

create table tab1(c1 int,c2 int ,c3 int);

create table tab2(c1 int,c2 int ,c3 int);

insert into tab1 select level,level,level from DUAL CONNECT by level <100000;

insert into tab2 select level,level,level from DUAL CONNECT by level <100000;

create index ind_tab1 on tab1(c1);

create index ind_tab2 on tab2(c1);

select * from user_indexes where table_name in ('TAB1','TAB2') ;

NEST LOOP(嵌套循环连接)

  优化器会选择一张代价较小的表作为驱动表,另一张表作为被驱动表,驱动表的每条记录与被驱动表进行一次连接操作。

需注意的问题:

- 选择小表作为驱动表。统计信息尽量准确,保证优化器选对驱动表。

- 大量的随机读。如果没有索引,随机读很致命,每次循环只能读一块,不能读多块。使用索引可以解决这个问题。

使用场景:

- 驱动表有很好的过滤条件

- 表连接条件能使用索引

- 结果集比较小

NEST LOOP INNER JOIN2(嵌套循环内连接)

explain select tab1.c1 from tab1 ,tab2 where tab1.c1>tab2.c1;

NEST LOOP LEFT JOIN2(嵌套循环左连接)

explain select tab1.c1 from tab1 left join tab2 on tab1.c2>tab2.c2;

HASH JOIN哈希连接

以一张表的连接列为哈希键,构造哈希表,另张表的连接列进行哈希探测,找到满足条件的记录。

HASH JOIN的特点:

 - 一般没索引或用不上索引时会使用该连接方式

 - 选择小的表(或row source)做hash表

 - 只适用等值连接中的情形,非等值一般用NEST LOOP

Hash连接比较消耗内存,如果系统有很多这种连接时,需调整以下3个参数:

 HJ_BUF_GLOBAL_SIZE

 HJ_BUF_SIZE

 HJ_BLK_SIZE

HASH2 INNER JOIN(HASH内连接)

explain select tab1.c1,tab2.c2 from tab1 , tab2 where tab1.c1=tab2.c1;

HASH LEFT JOIN2(HASH左外连接)

explain select tab1.c1 from tab1 left  join tab2 on tab1.c1=tab2.c1;

HASH FULL JOIN2(HASH 全外连接)

explain select tab2.c1 from tab1 full outer join tab2 on tab2.c1=tab1.c1 ;

全连接的查询结果是左外连接和右外连接查询结果的并集。

HASH LEFT SEMI MULTIPLE JOIN(多列not in)

explain select * from tab1 where (c1,c2) not in (select c1,c2 from tab2) ;

HASH LEFT SEMI JOIN2(HASH 左半连接)

子查询和非等值连接出现

explain select * from tab1 where c1 not in (select c1 from tab2) and c2 not in (select c2 from tab2);

HASH RIGHT JOIN2(HASH右外连接)

explain select t.c1 ,tab1.c3 from tab1 left join (select * from tab2 where c1=10)t on t.c1=tab1.c2 ;

MERGE JOIN(排序归并连接)

Merge Join 是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。

MERGE SORT的特点:

 - 无驱动表之分,随机读很少

 - 两个表都需要按照连接列排序,需要消耗大量的cpu和额外的内存

应用场景:

通常情况下,merge sort join需要消耗大量的cpu和内存,效率都不会太高。如果存在相关索引可以消除sort,那么CBO可能会考虑该连接方式。

explain select tab1.c1 from tab1,tab2 where tab1.c1=tab2.c1;

达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台


http://www.ppmy.cn/news/1503849.html

相关文章

劳动仲裁经验篇【赶紧收藏】

【劳动仲裁】纯经验干货分享&#xff0c;点个关注防止需要时找不到&#xff01; 当公司决定搞你心态&#xff0c;变相逼退你时&#xff0c;无非就那么些手段&#xff0c;只要你能正确应对&#xff0c;并做好收集证据的准备&#xff0c;就不住畏惧。合理利用法律的武器维护自身…

0727,学什么学,周六就应该休息!!!!!

周六就应该休息&#xff0c;一天就忙了两小时也不是我的错喵 目录 UDP的小总结 01&#xff1a;使用select实现一个基于UDP的一对一即时聊天程序。 1.0 复读机服务器和树洞客户端 2.0 byby不了一点的敬业服务器&#xff01;&#xff01;&#xff01; 今天到此为止&#x…

gitlab汉化

承接上文安装好gitlab 首先查看好gitlab的版本&#xff08;ps&#xff1a;要启动gitlab&#xff09; cat /opt/gitlab/embedded/service/gitlab-rails/VERSION我的版本是10.0.0 然后安装git yum install -y git然后克隆一下汉化的仓库 git clone https://gitlab.com/xhang/g…

贪心系列专题篇三

目录 单调递增的数字 坏了的计算器 合并区间 无重叠区间 用最少数量的箭 声明&#xff1a;接下来主要使用贪心法来解决问题&#xff01;&#xff01;&#xff01; 单调递增的数字 题目 思路 如果我们遍历整个数组&#xff0c;然后对每个数k从[k,0]依次遍历寻找“单调递…

“八股文”在实际工作中是助力、阻力还是空谈?

在当今企业招聘和面试程序员的过程中&#xff0c;“八股文”是否应该被视为一种助力&#xff0c;还是一个阻碍&#xff0c;甚至只是空谈&#xff1f;这个问题涉及到面试的实质和日常工作的实际需求&#xff0c;引发了广泛的讨论和反思。 首先&#xff0c;我们需要明确“八股文”…

the request was rejected because no multipart boundary was found

文章目录 1. 需求描述2. 报错信息3. 探索过程1. 使用postman 排除后端错误2. 搜索网上的解决方法3. 解决方法 1. 需求描述 想要在前端上传一个PDF 发票&#xff0c;经过后端解析PDF之后&#xff0c;将想要的值自动回填到对应的输入框中 2. 报错信息 org.apache.tomcat.util.…

MacOS 中 Office 历史记录一键清理

MacOS 中 Office 历史记录一键清理 如下 #!/bin/bash rm -rf ~/Library/Containers/com.microsoft.Word/Data/Library/Preferences/com.microsoft.Word.securebookmarks.plistrm -rf ~/Library/Containers/com.microsoft.PowerPoint/Data/Library/Preferences/com.microsoft.…

硬核!288页Python核心知识笔记(附思维导图,建议收藏)

不少朋友在学习Python时&#xff0c;都会做大量的笔记&#xff0c;随着学习进度的增加&#xff0c;笔记越来越厚&#xff0c;但有效内容反而越来越少。 今天就给大家分享一份288页Python核心知识笔记&#xff0c;相较于部分朋友乱糟糟的笔记&#xff0c;这份笔记更够系统地总结…