Mysql join语句

join 语句用于实现多表查询。

Index Nested-Loop Join

select * from a join b on a.id=b.id。对于两张表 a 和 b,Mysql 优化器会选择其中一张表执行全表扫描,称为驱动表。对于驱动表每一数据行,在被驱动表查询数据,将结果组合返回数据集。
假设驱动表行数是M,则时间复杂度为 M。
对于每一行,在 N 行被驱动表的非聚簇索引和局促索引各搜索一次。则时间复杂度为 M * 2 * log2(N)。
两者相加 M + M * 2 * log2(N)。可以看出应选择小表执行全表扫描,即作驱动表。这种使用索引的 join 语句称为 Index Nested-Loop Join(NLJ) ,性能不错。

Block Nested-Loop Join

如果被驱动表用不上索引,那么时间复杂度就是 M * N。mysql 对于这种 join 语句也有优化,称为 Block Nested-Loop Join。具体操作是:两张表都是全表扫描,用一块内存区域 join_buffer 存储其中一张表(驱动表)所有行的所选字段。扫描另一张表(被驱动表),与 Join_buffer 数据对比,满足则存入结果集。在内存执行 M * N 次操作比在磁盘执行 M * N 次操作快。

如果 join_buffer 不够大,放不下驱动表所有数据。则分段存放(这就是 Block Nested-Loop Join 中 Block 的含义)。多次将驱动表的不同数据存入 join_buffer,再全表扫描被驱动表。为了降低 join_buffer 替换次数,选择结果集更小的表作为驱动表。比如:表 a 有 30 行,查询 3 个 int 字段,表b 有 10 行,查询 10 个 int 字段。此时就应该选择 a 表。
优化方案可以是:增加 join_buffer 空间。

Batched Key Access

Multi-Range Read

之前我们提及回表:在非聚簇索引查到主键 id,再到聚簇索引查询数据行。如果在非聚簇索引查询大量 id,Mysql 提供 Multi-Range Read 机制优化回表。它将非聚簇索引查询到到的 id 集合在内存区域 read_rnd_buffer 排序并且按顺序在聚簇索引查询数据行。这样可以将随机访问变为顺序访问,提升读性能。

Index Nested-Loop Join 的优化

Index Nested-Loop Join 的被驱动表也有回表,Batched Key Access = Index Nested-Loop Join + Multi-Range Read。
具体来说:用 join_buffer 批量缓存驱动表的数据,在被驱动表回表查询时利用 MRR 提升读性能。

Block Nested-Loop Join 的优化

如果某些 join 查询使用频率很低,或者 where 条件过滤后表的数据行非常少,那么不适合建立索引。

但是不建立索引,时间复杂度 M * N。此时可以用临时表,在临时表为字段建立索引,将 Block Nested-Loop Join 变为 Index Nested-Loop Join

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

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

相关文章

Spring AI 系列之三十 - Spring AI Alibaba-其它模型

之前做个几个大模型的应用,都是使用Python语言,后来有一个项目使用了Java,并使用了Spring AI框架。随着Spring AI不断地完善,最近它发布了1.0正式版,意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

【Flutter3.8x】flutter从入门到实战基础教程(五):Material Icons图标的使用

flutter给我们内置准备了很多图标,这些图标可以使我们在没有设计师的前提下,也能做出自己满意的app icon网站 https://material.io/tools/icons/进入网站后,点击我们需要的图标,然后滑动找到flutter的tab选项,就可以看…

算法训练营day38 动态规划⑥ 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包

动态规划的第六篇!背包问题总结篇! 322. 零钱兑换 题目中说每种硬币的数量是无限的,可以看出是典型的完全背包问题。但是如何找最小的“组合”呢?(通过dp数组的不同定义 与 递推公式) 确定dp数组以及下标的…

vue+element 实现下拉框共享options

背景 用户的需求总是多样的,这不用户想做个下拉连选,每选一个基金,下方表格多一行,选择对应的重要性,任务;问题 其他都好弄,任务是远程搜索,选择人的单选下拉,如果每个下…

centos服务器安装minio

1.创建目录和下载文件 #创建相关文件夹 mkdir -p /home/minio mkdir -p /home/minio/bin mkdir -p /home/minio/data#进入上面创建的bin目录下 cd /home/minio/bin#下载minio(最新版minio无法通过页面的控制台配置accesskey建议选择2024年的版本操作) ht…

【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地

智能精准学寒雪老师 X 阿里云弹性计算:以坚实算力底座,实现 AI 一对一教育普惠的愿景 【导语】 当全球首个 K12 教育超级智能体“寒雪老师”在深夜为万千学子答疑解惑,支撑其流畅互动的,是阿里云弹性计算 15 年淬炼的坚实算力底座…

forge篇——配置

从这篇文章开始,我们开始研究forge代码,以下是forge源代码和代码解析 ForgeConfigSpec 类详细解析 ForgeConfigSpec 是 Minecraft Forge 模组开发中的核心配置类,基于 NightConfig 库实现,提供了类型安全、验证和自动纠正功能。以下是关键部分的详细解释: 1. 类定义与基…

全新发布|知影-API风险监测系统V3.3,AI赋能定义数据接口安全新坐标

7月31日,全知科技「知影-API风险监测系统V3.3」版本正式上线。在版本发布直播中,全知科技资深产品经理裴向南系统讲解了V3.3版本的核心亮点、能力升级与后续产品规划方向。作为全知科技自主研发的核心产品,「知影-API风险监测系统」自2017年起…

动作捕捉技术重塑具身智能开发:高效训练与精准控制的新范式

具身智能(Embodied AI)是指智能体通过与环境交互实现感知、学习和决策的能力,其核心在于模拟人类或生物的形态与行为。具身智能的发展意义在于突破传统AI的局限性,使机器能够适应复杂多变的真实场景,从而在工业制造、医…

【Andriod Studio】勾选不了Android SDK,提示unavailable

首先,直接说结论——网络(代理)有问题 先看第一个文章里面说的,https://blog.csdn.net/weixin_53485880/article/details/128200878 要确定自己没有开启代理(就是Set proxy里选cancel),安装SDK…

数据结构与算法——字典(前缀)树的实现

参考视频&#xff1a;左程云--算法讲解044【必备】前缀树原理和代码详解 类实现&#xff1a; class Trie {private:class TrieNode {public:int pass;int end;vector<TrieNode*> nexts;TrieNode(): pass(0), end(0), nexts(26, nullptr) {}};TrieNode* root; // 根指针…

STORM代码阅读笔记

默认的 分辨率是 [160,240] &#xff0c;基于 Transformer 的方法不能做高分辨率。 Dataloader 输入是 带有 pose 信息的 RGB 图像 eval datasets ## 采样帧数目 20 num_max_future_frames int(self.timespan * fps) ## 每次间隔多少个时间 timesteps 取一个context image n…

2025电赛G题-发挥部分-参数自适应FIR滤波器

&#xff08;1&#xff09;测评现场提供由RLC元件&#xff08;各1个&#xff09;组成的“未知模型电路”。 按照图3所示&#xff0c;探究装置连接该电路的输入和输出端口&#xff0c;对该电路进行 自主学习、建模&#xff08;不可借助外部测试设备&#xff09;&#xff0c;2分钟…

Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table

系统化、可直接上手的 /proc/sys sysctl 接口使用文档。内容涵盖&#xff1a;机制原理、适用场景、ctl_table 字段详解、常用解析器&#xff08;proc_handler&#xff09;完整清单与选型、最小样例到进阶&#xff08;范围校验、毫秒→jiffies、字符串、数组、每网络命名空间&a…

【RH124知识点问答题】第3章 从命令行管理文件

1. 怎么理解“Linux中一切皆文件”&#xff1f;Linux是如何组织文件的&#xff1f;&#xff08;1&#xff09;“Linux中一切皆文件”的理解和文件组织&#xff1a;在Linux中&#xff0c;“一切皆文件”指的是Linux将各种设备、目录、文件等都视为文件对象进行管理。这种统一的文…

练习javaweb+mysql+jsp

只是简单的使用mysql、简单的练习。 有很多待完善的地方&#xff0c;比如list的servlet页面&#xff0c;应该判断有没有用户的。 比如list.jsp 应该循环list而不是写死 index.jsp 样式可以再优化一下的。比如按钮就特丑。 本文展示了一个简单的MySQL数据库操作练习项目&#x…

使用Nginx部署前端项目

使用Nginx部署前端项目 一、总述二、具体步骤 2.1解压2.2将原来的html文件夹的文件删除&#xff0c;将自己的静态资源文件放进去&#xff0c;点击nginx.exe文件启动项目2.3查看进程中是否有ngix的两个进程在浏览器中输入“localhost:端口号”即可访问。 2.4端口被占用情况处理 …

【论文学习】KAG论文翻译

文章目录KAG: Boosting LLMs in Professional Domains via Knowledge Augmented Generation摘要1 引言2 方法论2.1 LLM友好型知识表示2.2 互索引机制2.2.1 语义分块2.2.2 带丰富语境的的信息抽取2.2.3 领域知识注入与约束2.2.4 文本块向量与知识结构的相互索引2.3 逻辑形式求解…

24黑马SpringCloud安装MybatisPlus插件相关问题解决

目录 一、前言 二、菜单栏没有Other 三、Config Database里的dburl需要加上时区等配置 一、前言 在学习24黑马SpringCloud的MybatisPlus-12.拓展功能-代码生成器课程时&#xff0c;发现由于IDEA版本不同以及MybatisPlus版本更新会出现与视频不一致的相关问题&#xff0c;本博…

人工智能赋能聚合物及复合材料模型应用与实践

近年来&#xff0c;生成式人工智能&#xff08;包括大语言模型、分子生成模型等&#xff09;在聚合物及复合材料领域掀起革命性浪潮&#xff0c;其依托数据驱动与机理协同&#xff0c;从海量数据中挖掘构效关系、通过分子结构表示&#xff08;如 SMILES、BigSMILES&#xff09;…