当前位置: 首页 > news >正文

SQL性能优化指南:如何优化MySQL多表join场景

多表join问题SQL

对于某个复杂业务场景,通常需要根据多个过滤条件才能拿到两个表中的信息。例如,某开发同事费了半天劲写了一个多表join的SQL实现了功能,但上线后却发现对应接口响应特别慢,通过一步步排查后才定位到问题SQL,SQL如下:

select cell.*, res.pod_name from dbfree.dbins_cell cell right join dbfree.dbins_resource res on 
cell.ip = res.pod_ip where cell.ip in ('10.174.156.14', '10.174.187.144', '10.174.67.11') and
res.path in ('/dev/sdb6', '/dev/sdb5') order by res.namespace;

看下该问题SQL的执行计划: 

image

 

执行计划中可以看到两个表的type都是ALL,且cell表的Extra中出现 Using join buffer (Block Nested Loop),代表两个表发生了全表扫描,且使用了join buffer。

这里解释下 Using join buffer (Block Nested Loop):
Using join buffer:表示 MySQL 在执行JOIN时使用了连接缓冲区。这意味着外层表的部分行被加载到内存中,以便与内层表进行匹配。

(Block Nested Loop):指的是 MySQL 使用了块嵌套循环算法,而不是简单的嵌套循环。这种方法优化了JOIN操作,尤其是在内层表没有索引时,能够提高连接的性能。

对性能产生的影响:
内存使用: 使用连接缓冲区意味着 MySQL 会消耗更多内存,因此可以处理更大块的数据,从而减少 I/O 操作并提高性能。

缺乏索引: 这个提示通常表明内层表缺乏合适的索引,导致 MySQL 需要通过全表扫描的方式来处理JOIN操作。虽然 Block Nested Loop比简单的嵌套循环更高效,但相较于使用索引,仍然可能比较慢。

三种join算法介绍
join操作是一种将两个或多个表的行结合起来的方法,本质就是把各个表中的记录都取出来依次匹配的组合加入结果集并返回给用户。

例如SQL:

select * from employee e join department d on e.id = d.employee_id

join操作主要使用以下几种算法:
(1)Nested Loop Join
这是最基本的连接算法,也被称为嵌套循环连接。对于第一个表中的每一行,它会扫描第二个表中的所有行来寻找匹配的行。这种方法的效率通常较低,特别是当表的大小增加时,因为它需要进行大量的磁盘I/O操作。

相当于两个嵌套for循环:

 for(employee表行 eRow : employee表){for(department表的行 dRow : department表){if(eRow.id = dRow.emp_id){return eRow;}}
}

image

 

http://www.jsqmd.com/news/172921/

相关文章:

  • 良心插件,办公神器
  • LangChain Tools解析:让Agent拥有超能力
  • springboot+vue地铁站自动售票系统-火车票售票系统
  • CCF-GESP计算机学会等级考试2025年12月二级C++T2 黄金格
  • LLM气象数据融合流感预警提前两周
  • 下载 | Windows Server 2019最新原版ISO映像!(集成12月更新、标准版、数据中心版、17763.8148)
  • ssmvue 电子病历
  • 下载 | Windows Server 2016最新原版ISO映像!(集成12月更新、标准版、数据中心版、14393.8692)
  • net-i家校通系统 课堂作业考勤系统小程序
  • ⚡ 实时控制也能多线程?高效并行机制解析-SFTW-Multithreading
  • 专科生必看!8个降AI率工具高效避坑指南
  • ST1VAFE3BX :穿戴式心电与运动健康监测设备完整应用案例
  • 一个男人不想失去你,才会有这9种表现,别不懂
  • MySQL主键类型选型指南:自增、UUID、雪花算法怎么选
  • net美食点餐系统 校园外卖跑腿系统vue骑手
  • 清理C盘的python脚本
  • 提升AI工具效能的秘密武器——系统提示与模型库!
  • 跨年夜收转账这么回,笑到他心甘情愿再转“
  • linux系统加固
  • 异步线程加速实时模型:多线程效率提升实战-SFTW-FIFO
  • 2026改一个越用越旺的昵称(收藏版)
  • 2025年GEO优化服务商横向评测:爱搜索人工智能位列榜首
  • 我的本地知识库初体验
  • 主机设备实时控制 -SFTW-PC-Peripherals
  • 2025最新!9款AI论文平台测评:本科生写论文必备推荐
  • 日语契机相关
  • 动态重构与实时模型切换-SFTW-MutiModel
  • 入驻爱发电https://ifdian.net/a/iis7o
  • PCB铜厚不达标怎么办?测量方法、成因分析及控制措施
  • 日语形式体言