jion

Index Nested-Loop Join

  • 被驱动表走索引
  • 查询次数 N + N * log M
  • 用小表作为驱动表
  • MRR优化
    • 根据索引,定位到满足条件的记录,将 id 值放入 read_rnd_buffer 中
    • 将 read_rnd_buffer 中的 id 进行递增排序
    • 排序后的 id 数组,依次到主键 id 索引中查记录,并作为结果返回
    • set optimizer_switch=“mrr_cost_based=off”
  • BKA优化
    • 将驱动表的数据分批放入join_buffer
    • set optimizer_switch=‘mrr=on,mrr_cost_based=off,batched_key_access=on’;

Block Nested-Loop Join

  • 被驱动表不走索引
  • 驱动表被分块装入join_buffer,然后跟被驱动表的数据进行对比
  • 如果驱动表的数据可以全部装入join_buffer,那么扫描次数为 N + M,内存对比次数N * M
  • 如果驱动表的数据分K次装入join_buffer,那么扫描次数为 N + k * M,内存对比次数N * M
  • 用小表作为驱动表
  • 尽量优化,不使用
  • 可能会多次扫描被驱动表,占用磁盘 IO 资源
  • 判断 join 条件需要执行 M*N 次对比(M、N 分别是两张表的行数),如果是大表就会 占用非常多的 CPU 资源
  • 可能会导致 Buffer Pool 的热数据被淘汰,影响内存命中率
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发财猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值