美文网首页
MySQL中join有几种算法,有啥区别

MySQL中join有几种算法,有啥区别

作者: 古飞_数据 | 来源:发表于2023-04-19 06:32 被阅读0次

Nested-Loop Join(循环嵌套连接)

  1. Simple Nested-Loop Join(简单嵌套循环连接)
  2. Index Nested-Loop Join(索引嵌套循环连接)
  3. Block Nested-Loop Join(缓存块嵌套循环连接)
show variables like '%join_buffer%' ;   默认值:join_buffer_size=256k

调大 join buffer size ,建议最大 1G

使用Block Nested-Loop Join算法需要开启优化器管理配置的optimizer_switch的设置block_nested_loop为on,
默认是开启的。

 show variables like '%optimizer_switch%' 查看block_nested_loop状态

MRR优化
MRR优化的目的就是减少磁盘随机IO的产生,其查询优化过程大致如下:

1、先把通过二级索引取出的值缓存在缓冲区中。
2、再把这部分缓冲区中的数据按照ID进行排序。
3、然后再依次根据ID去聚集索引中获取整个数据行。

可以看出,只需要通过一次排序,就使得随机IO,变为顺序IO,使得数据访问更加高效。

read_rnd_buffer_size控制了数据能放入缓冲区的大小,如果一次性不够放就会分多次完成。

相关文章

网友评论

      本文标题:MySQL中join有几种算法,有啥区别

      本文链接:https://www.haomeiwen.com/subject/oqyfzrtx.html