美文网首页
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