您的位置:首页 > Web前端

join_buffer_size

2016-03-07 10:58 274 查看
应用经常会出现一些两表(或多表)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只分配一次)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: