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

2023-04-19  本文已影响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控制了数据能放入缓冲区的大小,如果一次性不够放就会分多次完成。

上一篇下一篇

猜你喜欢

热点阅读