MySQL参数优化之join_buffer_size

news2024/9/28 19:21:46

1.查看当前值

 show  variables like '%join_buffer_size%'

在这里插入图片描述
mysql默认该设置为128 或 256 或512k,各个版本有所出入

2.作用范围

在mysql中表和表进行join时候,无论是两个表之间还是多个表之间,join的情况大致分为下面几种情况

  1. join key 有索引 或者是主键

  2. join key 有索引,但是属于二级索引

  3. join可以没有索引

join-buffe_size 真正起作用的是前面提到的 第 2 和3中情况,即表之间关联需要进行表扫描操作,而如果关联的

key使用有索引 或主键的是不需要用到join_buffer_size的,因为本身走索引效果更好

3.如何起作用

在mysql中两个表之间关联的关联算法只有 迭代循环这个算法,而join_buffer_size就是在迭代循环没有索引的情况下,减少过多的表扫描而设计的,关于表关联算法大概有下面几种

  1. Nested-loop join

  2. merge join

  3. Hash join

正如前面说的mysql现在是只有nested-loop,后续会有新的算法,8.0已经引入了hash,而针对迭代算法,如果在有索引的情况下肯定是非常快的(前提是两表都不大,或至少有一个小表),一般会将数据量小的表称为驱动表或外表,从小表中取数据在大表中进行匹配,大概意思我们看下面的图

在这里插入图片描述
在这里插入图片描述
我们假设 a 表 1000条记录 b表100000条记录,那么针对下面的sql(关联key没有索引或主键)

select * from a

inner join b on a.id=b.id

我们需要依次从a表中取1000次记录,并将这些记录在b表中遍历1000次,假设b表的数据是上千万,

那么我们需要对b表进行1000次的scan,效率会差的要命。

Block Nested-Loop Join

块嵌套循环,简称 BNLJ,这个看起来比普通的Nested-loop 多了一个block,没错就是块,通俗来讲就是每次别一条条的去内表遍历了,每次整个1000条去遍历多好,我们如果每次是1000条那么上面的的sql语句的遍历次数就会从1000次直接降低到1次,理论上性能提高了将近1000倍,但是决定你去内表迭代的条数可不是随心所欲的,肯定有个地方要进行限制,毕竟一条和1千条使用的内存是不同的,ok这里就是join_buffer_size该起作用的时候了,我们通过设置该值大小来控制能有多少条记录统一一次去进行遍历操作,而不是每次一条。

4.使用建议

不建议在系统级别对该值设置过大,一般可以设置512K以内,因为最终解决方案还是要依靠索引来解决,当然不排除

有时候两个表关联的确是没有索引可用的,那我们可以在session级别来调大该值,以便能快速获得我们所需数据

比如设置session 中该值为512M,语句如下

set session join_buffer_size =10241024512;

当然这些在sql server 或orale 中都是优化过的了,不用我们过多关注,比如sql server直接将小表加入到内存中去

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leaflet 设置一个图层或者多个图层的透明度(075)

第075个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中如何设置一个图层或者多个图层的透明度,利用了layer的setOpacity方法。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共137行)相关API参考:专…

Windows保护机制GS:原理及SEH异常处理突破

前言 本次文章只用于技术讨论,学习,切勿用于非法用途,用于非法用途与本人无关! 所有环境均为本地环境分析,且在本机进行学习。 GS机制并没有对SEH提供保护,换句话说我们可以通过攻击程序的异常处理达到绕…

【java 高并发编程之JUC】2w字带你JUC从入门到精通

点击查看脑图目录地址,实时更新 1 什么是 JUC 1.1 JUC 简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC 就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。 1.2 进程与…

Leetcode_part1

Content [1. Two Sum](https://leetcode.com/problems/two-sum/)Solution 1Solution 2[递归: 17. 电话号码的字母组合](https://leetcode.com/problems/letter-combinations-of-a-phone-number/)Solution 1 暴力Soulution 2 回溯Solution 3 队列[18. 四数之和](https://leetcod…

app截图+识别截图中的文字

在自动化测试的过程中,我们会经常遇到需要进行文字识别的场景,比如 识别验证码、识别截图中的文字、读取截图中的数值 等等,遇到这些情况时我们可以如何处理呢? 本机要有PaddleOCR环境,PaddleOCR可参考我另一篇 Padd…

存储类别、链接与内存管理(二)

0、前言概要 本篇来自于我的另外一篇博客存储类别、链接与内存管理(一)的续篇,主要分析了C语言中的不同存储类别、关键字以及使用的注意事项 1、自动变量 (1)属性 自动存储期、块作用域、无连接 (2&a…

vue项目实现会议预约(包含某天的某个时间段和某月的某几天)

一、一天的时间段预约 会议预约有以下操作: 1.点击预约按钮,弹窗最近一周的预约时间点(半小时一个点),预约时间为5:00到24:00; 2.超过当前时间的时间点不允许再预约,已经预约的时间不允许再预约&#xff0c…

【C++】类和对象三大特性--继承

文章目录1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6. 继承与静态成员7.复杂的菱形继承及菱形虚拟继承虚拟继承解决数…

医疗器械实验室设计规划全了SICOLAB

一、通用型实验室医疗器械物理性能能检测中,有部分通用型试验,可覆盖不同产品检测,这些实验室需要重点考虑、设计。1、微粒检测室微粒检测室用于医疗器械产品微粒检测,包括微粒、落絮、药液滤除率等项目。微粒检测室要求为洁净室&…

学习笔记<二> MySQL学习(3):分库、分表

文章目录为什么分库分表一、垂直分片、水平分片二、常用的数据分片策略三、垂直分表、垂直分库、水平分库、水平分表四、垂直切分、水平切分优缺点五、数据分片规则六、分库分表带来的问题本文参考博主「小Y是我的」的文章,原文链接:https://blog.csdn.n…

Android基础练习解答【1】

文章目录第一章课后练习题一填空题二 判断题(正确打√,错误打)三 选择题四 简答题第一章课后练习题 一填空题 Android是基于_Linux _ 的移动端开源操作系统。 解答:安卓(Android)是一种基于Linux内核&…

C语言深度解剖-关键字(7)

目录 switch case 语句 理解: 补充: 深入理解: default 语句: case语句: 总结: do、while、for 关键字 while for do while 各种死循环方法: while for do while getchar 写在…

企业电子招投标采购系统源码之功能模块的描述

功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外部供…

【Spark分布式内存计算框架——Spark SQL】6. 数据处理分析

第四章 数据处理分析 在SparkSQL模块中,将结构化数据封装到DataFrame或Dataset集合中后,提供两种方式分析处理数据,正如前面案例【词频统计WordCount】两种方式: 第一种:DSL(domain-specific language&am…

数据库(四)

第五章 MySQL备份恢复 5.1 MySQL日志管理 在数据库保存数据时,有时候不可避免会出现数据丢失或者被破坏,在这样情况下,我们必须保证数据的安全性和完整性,就需要使用日志来查看或者恢复数据了。 数据库中数据丢失或被破坏可能原…

人工智能 LLM 革命前夜:一文读懂ChatGPT缘起的自然语言处理模型Transformer

作者:钟超 阿里集团大淘宝团队 [01] https://web.stanford.edu/~jurafsky/slp3/3.pdf [02] https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html [03] 《自然语言处理:基于预训练模型的方法》车万翔 等著 [04] https://cs.stanfo…

如何系统的、阶段的学习Java开发,真正的从入门到精通

Java 后端有着非常庞大的生态圈,也涉及到很多复杂的问题,如分布式事务、分布式查询、微服务、高并发、容灾、容器化等等,涉及到的技术栈和框架就更多了。不过,我们目前只是为了快速入门,我们只会学习最必要的那些知识&…

ubuntu18.04下pytorch版Maskrcnn编译错误汇总

ubuntu18.04下pytorch版Maskrcnn编译错误汇总1 anconda环境配置2 bug及解决办法2.1 Detected CUDA version (11.2) mismatches the version that was used to compile PyTorch(10.2)2.2 error: legacy-install-failure Encountered error while trying to install package.╰─…

Cron表达式 的含义、相关知识点及相关表达式示例

学习目标: 本篇博文学习目标如下: 掌握 Cron表达式 学习内容: Cron表达式: 1、Cron表达式的含义: Cron表达式是一个具有时间含义的字符串,字符串以5-6个空格隔开,分为6~7个域,格式为X X X X …

一文讲透sparkHistoryServer与yarnHistoryServer关系

1、spark history 和 yarn history 的区别? Spark History Server 和 YARN History Server 是用于查看和分析Spark和YARN 应用程序的执行情况的两个不同的工具。 Spark历史服务器是专门用于Spark应用程序的工具,它提供了一个界面,可以查看S…