MySQL调优 —— LEFT JOIN

本文探讨了一个在两个表(A表大表,B表小表)进行LEFT JOIN查询时导致性能问题的案例。最初未优化的SQL查询耗时3.712秒,扫描行数接近两个表的笛卡尔积。MySQL使用BLOCK Nested-Loop算法,驱动表的选择影响性能,但优化器会自动选择。将LEFT JOIN改INNER JOIN并根据业务需求减少扫描行数,时间降低到2.745秒。进一步通过在B表的连接字段上添加主键和索引,查询时间缩短至0.109秒,显著提升了查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前情提要 : 需求就是一个普通的两个表连接从而查询出详细信息。其中A表是大表, 测试数据都有数万条; B表是小表大概1000多条数据。


1. 为了赶工写出的未优化SQL(为突出主题, 返回字段用 * 代替不写出详细字段, WHERE条件也去掉了):

SELECT 
   	   *
    FROM
        A a    	
    LEFT JOIN
    	B b   
    ON 
    	  a.JOB_ID = b.ID

耗时:3.712s




  rows字段代表这个步骤相对上一步结果每一行需要扫描的行数,可以看到这个sql需要扫描的行数为22711*1230, 这几乎是两个表做笛卡尔积的开销了(select * from a, b)。 


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值