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

embedded/2024/9/23 10:23:05/

目录

连接方式

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/embedded/88266.html

相关文章

C++ | Leetcode C++题解之第283题移动零

题目&#xff1a; 题解&#xff1a; class Solution { public:void moveZeroes(vector<int>& nums) {int n nums.size(), left 0, right 0;while (right < n) {if (nums[right]) {swap(nums[left], nums[right]);left;}right;}} };

环境如何搭建部署Nacos

这里我使用的是Centos7&#xff0c; Nacos 依赖 Java环境来运行。如果您是从代码开始构建并运行Nacos&#xff0c;还需要为此配置 Maven环境&#xff0c;请确保是在以下版本环境中安装使用 ## 1、下载安装JDK wget https://download.oracle.com/java/17/latest/jdk-17_linux-x6…

web前端开发一、VScode环境搭建

1、VScode安装live server插件&#xff0c;写完代码后&#xff0c;保存就会在浏览器自动更新&#xff0c;不需要再去浏览器点击刷新了 2、创建html文件 3、在文件中输入感叹号 &#xff01; 4、选择第一个&#xff0c;然后回车&#xff0c;就会自动输入html的标准程序 5、…

【数据结构】栈的实现

一、简述栈 1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。压栈…

反爬虫限制:有哪些方法可以保护网络爬虫不被限制?

目前&#xff0c;爬虫已经成为互联网数据获取最主流的方式。但为了保证爬虫顺利采集数据&#xff0c;需要防范网站的反爬虫机制&#xff0c;降低IP被限制的风险&#xff0c;这样才能提高爬虫工作的效率。那么&#xff0c;如何防止网络爬虫被限制呢&#xff1f;下面介绍几种有效…

九大原则,轻松构建个人高效SOP

1、原则一、工作汇报SOP SCQA模型(升职加薪的关键!&#xff09; 清晰定义问题和提出解决方案 类别 关键词 解读 S - Situation 情景 陈述项目背景&#xff0c;目标&#xff0c;愿景 C - Complication 冲突 讲卡点&#xff0c;讲冲突 Q - Question 疑问-问题 这些冲…

jenkins获取sonarqube质量门禁结果

前景 在使用 Jenkins 集成 SonarQube 时&#xff0c;获取质量门禁&#xff08;Quality Gate&#xff09;结果非常重要。SonarQube 的质量门禁是一种质量控制机制&#xff0c;用于评估代码质量是否符合预设的标准。以下是获取质量门禁结果的意义和作用&#xff1a; 评估代码质量…

linux常见面试题(三)

18 什么事SQL注入 由于程序员的水平及经验参差不齐&#xff0c;大部分程序员在编写代码的时候&#xff0c;没有对用户输入数据的合法性进行判断。 ​ 应用程序存在安全隐患。用户可以提交一段数据库查询代码&#xff0c;根据程序返回的结果&#xff0c;获得某些他想得知的数据…