join_buffer_size
应用经常会出现一些两表(或多表)join的操作需求,MySQL在完成某些join需求的时候(all row join/all index /scan join)为了减少参与join的“被驱动表”的读取次数以提高性能,需要使用到joinbuffer来协助完成join操作当join buffer太小,MySQL不会将该buffer存入磁盘文件而是先将join buffer中的结果与需求joi
应用经常会出现一些两表(或多表)join的操作需求,MySQL在完成某些join需求的时候(all row join/all index /scan join)为了减少参与join的“被驱动表”的读取次数以提高性能,需要使用到join buffer来协助完成join操作当join buffer 太小,MySQL不会将该buffer存入磁盘文件而是先将join buffer中的结果与需求join的表进行操作,然后清空join buffer中的数据,继续将剩余的结果集写入次buffer中,如此往复,这势必会造成被驱动表需要被多次读取,成倍增加IO访问,降低效率(执行计划中如果现实using join buffer)
两个表关联的时候 减少参与被驱动表的join操作(没办法有效利用索引的时候)
多表join时,就需要用到join buffer的三种情况
All row join do not user indexes nad thus perform full table scans(没有索引的全表扫描)
All index join plain index scans(普通索引扫描)
Range index scan join=rangeindex scans(范围索引扫描)
最好是添加适当的索引而不是纯粹加大join_buffer_size
任何来个表间的全表join就会分配一次join_buffer也就是说,如果3个表join就会分配2次joinbuffer(而不是一个session只分配一次)
更多推荐
所有评论(0)