Mysql学习之三. NLJ和BLN介绍

news/2025/3/15 23:22:22/

一.mysql中表关联有两种常见算法

1.1. N L J 嵌套循环算法 (Nested Loop Join)

1.2.B N L 块嵌套循环 (Block Nested Loop Join)

二. 简介

        2.1.N L J 嵌套循环算法 (Nested Loop Join)

内连接inner join, 数据库会自主选择驱动表,(以小表驱动大表)

Left Join, 以左边的表为驱动表

Right Join,以右边的表为驱动表

执行的流程为:

        循环驱动表,取出一行数据,然后赋值给对应的关联字段中的值

         拿到上述行的对应字段的值,作为条件去被驱动表中搜索

2.1. B N L 块嵌套循环 (Block Nested Loop Join)

拿到所有驱动表的数据丢入一个Join Buffer中,

然后遍历 被驱动表里的每一条数据去进行匹配

三. 适用场景

3.1. 当被驱动表 的关联字段是 索引字段时  走NLJ 算法

3.2. 当被驱动表 的关联字段是 非索引(普通)字段时, 走BNL算法

为啥呢?

假设这里有大表t1  一万行数据, 小表t2 一百行数据

id ,主键字段

a , 普通索引字段

b , 普通字段

select t1.*, t2.* from t1 inner join t2 on t1.a = t2.a  

(a是索引字段,走NLJ算法)

Select t1.*, t2.* from t1 inner join on t1.b = t2.b

(b是非索引的普通字段,走BNL算法)

假设:用b字段作为关联的这种场景,不走BNL,而是走NLJ算法会发生啥问题?

  小表驱动大表的思想,t2去循环每一条数据,然后 通过 t1.b = ‘某个常量’去搜索t1表

这时,t1表就发生了全表扫描。    然后t2表循环到下一条数据,同样,t1表再次发生全表扫描

这是不可接受的!!!


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

相关文章

BLN/BNA--surfer文件格式说明

BLN——白化文件 用来白化各种等值线图 格式: length,flag "Pname 1" x1,y1 x2,y2 ... xn,yn length: 即白化范围坐标点数,注意闭合(多边形起点坐标要在最后重复) flag :0 代表白化内部 1代表…

【科研杂记_1】ArcGIS制作.bln格式数据,并在Matlab中绘出

一、制作步骤: 1.基础数据研究区域的shp格式数据 2.工具箱–数据管理工具–要素–要素折点转折点 3.根据如上原理,选择输入的研究区域,此处为面输入,也可以尝试线输入,点类型选择ALL 4.打开输出数据的属性表&#xff0…

通过surfer提取边界bln文件的方法

打开Surfer 13软件,点击New Plot 新建基底图层 3.点击该图层,下方Image Coordinates中输入图片左下角和右上角的经纬度(该操作注意配准的是图片的左下角和右上角坐标,不是图片中图形的左下角和右上角坐标,所以有时需要…

制作bln边界文件

1.在ArcGIS中打开自己需要的区域的shp文件(未选择区域时需要进行裁剪) 2.选择Arctoolbox中的Data Management Tools(数据管理工具) 3.选择要素→要素转线 4.将转好的线文件,选择要素折点转点 5.转成点后,打…

Java文件与IO

文章目录 前言认识文件绝对路径与相对路径普通文件与二进制文件 Java中的操作文件File 类文件的读写 前言认识文件 狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个…

用于FPGA远程更新的QuickBoot方法

用于FPGA远程更新的QuickBoot方法 用于FPGA远程更新的QuickBoot方法 用于FPGA远程更新的QuickBoot方法1. 远程更新简介2 QuickBoot方案2.1 QuickBoot配置方法2.2 QuickBoot Flash 编程方法 3.QuickBoot实现3.1 Critical Switch World (key point)3.2 QuickBoot存储映射3.3 Bits…

信息查询与信息资源

本书主要介绍在Internet上查询各种信息资源的方法,其中对经济类信息查询有专门的说明。不过,在正式介绍之前,我们需要首先了解一些比较基本的概念和原理,以方便后续书中内容的学习,同时也有助于那些对信息查询原理不是…

go 笔记 第七章 golang 的函数 func 方法

声明函数 func 函数名(入参1 类型, 入参2 类型,… )(出参1 类型, 出参2 类型…){ 函数体,写逻辑 出参一定要全部 return, return 出参 } 函数内部不可以声明带名字的函数,可以声明匿名函数和自执行函数 函数名大写可以被其他包调用&#x…