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