暂无图片
MySQL里多表join中MySQL里用到的方式有哪些?
我来答
分享
小七
2022-09-22
MySQL里多表join中MySQL里用到的方式有哪些?

Hash loop

Batched Key Access

Index Nested-LoopJoin

Block Nested-Loop

Nested-Loop Join

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
农夫三拳

C Index Nested-LoopJoin

D Block Nested-Loop

E Nested-Loop Join

暂无图片 评论
暂无图片 有用 1
超越无限D
2022-09-22
longlongago7777
2022-12-02
X
chengang

ABCDE 都有吧。

A 是8.x版本才有的

D 是在没有索引的情况下 对E的优化

C 是有索引的情况下 对E的优化

B 是再次对C的一种优化方式。 但一般很少开启。因为排序同样也有成本开销。

暂无图片 评论
暂无图片 有用 1
张sir
2022-09-22
说的清楚
刘贵宾

B Batched Key Access

C Index Nested-LoopJoin

D Block Nested-Loop

E Nested-Loop Join

暂无图片 评论
暂无图片 有用 5
张sir

A Hash loop=====>准确的应该叫hash join,mysql从8.0开始支持两个表通过hash join进行关联。

B Batched Key Access=====》将外层循环的行/结果集存入join buffer,内层表通过索引访问,并按主键顺序排序,批量提交给存储引擎获取数据。

C Index Nested-LoopJoin=====》当关联字段有索引的时候,可以被当作内表,外表取一行数据,通过内表索引,在内表进行查询。

D Block Nested-Loop=====》将外层循环的行/结果集存入join buffer, 内层循环的每一行与整个buffer中的记录做比较,从而减少内层循环的次数,关联字段无索引。

E  Nested-Loop Join ======》内外两层循环,对外循环中的每条记录,都要再内循环中做一次检索。

以上BCDE均是NL的方法,BC是关联条件有索引的情况,B比C效率高,DE是关联条件无索引的情况。D比E效率高。

暂无图片 评论
暂无图片 有用 3
soul0202

8.0前没有 A hash join 8.0后有的

B Batched Key Access

C Index Nested-LoopJoin

D Block Nested-Loop

E Nested-Loop Join

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏