【mysql系列】阿里巴巴的规范里为什么不建议3张表以上的left join查询,mysql left join查询是怎么实现的,为什么要禁止多表的left join查询

【mysql系列】阿里巴巴的规范里为什么不建议3张表以上的left join查询,mysql left join查询是怎么实现的,为什么要禁止多表的left join查询

 
规范里说明,不能在3张表以上的查询中使用 left join查询,这是为什么呢?

首先我们看看mysql是如何实现left join这种查询的,

 答: mysql 使用 nested loop join 嵌套循环的方式实现join查询


 就是两层循环,第一张表做外循环outter loop ,第二张表做循环inner loop,双层循环。外循环的每条记录都要和内循环的每条记录进行比较 ,符合条件就输出。


嵌套循环 具体算法上就是有3种:
 1. simple nested loop join 简单的嵌套循环
 2. block  nested loop join 缓存的嵌套循环
 3. index  nested loop join 索引的嵌套循环
 
 · simple nested loop join 性能最差,简单的两张表全表扫描, 复杂度就是 O(N²)
  · index  nested loop join 基于索引的嵌套循环,好点,当内循环的查询,可以使用到索引的时候,就会根据索引进行查询, O(logN)
 ·   block  nested loop join 基于缓存的嵌套循环,就是用到了 buffer, 当外循环查询的时候,查询到的数据会放在多个join buffer中 然后内循环的时候,每行数据和每个buffer中的数据进行比较,从而检查查询次数, 复杂度是 O(N*M) -- M就是join buffer的个数。
 
 知道了上面这3种情况后,就知道表越多, 表中数据越多的时候,join查询的性能会越来越低。所以不建议使用 join 多表查询。这就是理由。 
 
 
  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值