mysql的join原理

mysql的join原理

​ Nested-Loop Join 算法,需要区分驱动表和被驱动表,先访问驱动表,筛选出结果集,然后将这个结果集作为循环的基础,访问被驱动表过滤出需要的数据。

​ 算法这两种表分为驱动表和被驱动表,使用嵌套循环。驱动表在外循环,被驱动表在内循环。

  • SNLJ,Simple Nested-Loop Join,简单嵌套循环。
  • NLJ,Index Nested-Loop Join,索引嵌套循环。如果 join 的字段有索引
  • BNLJ,Block Nested-Loop Join,块嵌套循环。如果 join 的字段没有索引,加入了 buffer 缓冲区,降低了内循环的个数,也就是被驱动表的扫描次数。这个 buffer 被称为 join buffer

为什么join要小表驱动大表

类似循环嵌套
for(int i=5;.......)
{
     for(int j=1000;......)
     {}
}
  • 如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表。
posted @ 2021-04-20 21:02  i%2  阅读(79)  评论(0)    收藏  举报