MySQL[PGA] join_buffer_size

join_buffer_size

应用程序经常会出现一些两表(或多表)JOIN的操作需求,

MySQL再完成某些Join需求的时候(all row join / all index join / range index scan join )

为了减少参与JOIN的“被驱动表”的读取次数以提高性能,

需要使用到JOIN Buffer来协助完成JOIN操作。

多表JOIN时,需要用到join buffer的三种情况:

all row join => do not use indexes and thus perform full table scans(没有索引的全表扫描)

all index join => plain index scans (普通索引扫描)

range index scan join => range index scans (范围索引扫描)

两表或者多表join的时候如果索引用的不太好的话,没有办法有效的利用索引的时候,就需要用到join buffer

如果有合适的索引 比如说唯一索引进行驱动的时候 那么这时候就不需要用到join buffer了

最好是添加适当的索引,而不是纯粹的加大 join_buffer_size

任何两个表间的全表join就会分配一次jion buffer,也就是说,如果有3个表join,就会分配2次join buffer(而不是session只分配一次)

上面几个buffer size 一般设置为128K~2M足够

当join效率很差时 适当加大join buffer的大小

join buffer是两表两表生成 就是当前2个表生成join buffer之后 会生成临时表 再与第三表join 就是临时表与第三表进行join 产生join buffer