基于外连接查询的一点优化建议

文章讨论了在MySQLInnoDB环境下,为何大厂工程师推荐在外连接查询中避免使用`*`查询所有列,因为这会导致驱动表数据大量加载内存,增加性能消耗。优化建议是只查询必要的列,控制joinbuffer大小以减少IO操作次数。
摘要由CSDN通过智能技术生成
###### 基于外连接查询的一点优化建议:

为什么大厂工程师不让在连接查询中让查询 * ,只让查询自己想要得到的列,这个问题基于查询成本的优化:在mysql中innodb情况下我们在使用left jion 外连接查询表结构的时候,比如 select * table1 left join table2 on 1.条件1 =2.条件2 where 1.条件3 ,这个时候我们 table1 作为 驱动表 table2作为被驱动表;
在上面条件情况下 ,这个时候mysql会把table1 表全部查询出来 然后 在条件3下面查询所有table1的数据集做为结果集和on后面 条件关联起来 然后关联查询table2的结果,在这个过程中mysql会把表中table1查询结果集加载进入内存中,然后把被驱动表的记录做匹配,假如结果集有两条记录那么就是查询两次被驱动表,因为内存有限,假如被驱动表很大,被驱动表就要被多次io加载进入内存中,加大性能消耗和时间长,mysql设立了一个概率,join buffer ,会把驱动表table1先查询的结果集先加载进入join buffer 中,然后批量和被驱动表查询对比,但是join buffer 默认大小是256kb ,当时是第一次的查询结果越小越好,超过256kb的就要多次查询驱动表,这就是为什么要在外连接查询中一定要尽量少的驱动表的列查询出来,避免使用*

在这里插入图片描述

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值