zoukankan      html  css  js  c++  java
  • join的三种方式

    1、Using join buffer (Block Nested Loop)

    • 例如A表 Join B表,如TYPE类型是ALL或Index时候,则可以使用连接缓存(Join Buffer)
    • 官方示例代码:
      for each row in t1 matching range {
        for each row in t2 matching reference key {
          store used columns from t1, t2 in join buffer
          if buffer is full {
            for each row in t3 {
              for each t1, t2 combination in join buffer {
                if row satisfies join conditions, send to client
              }
            }
            empty join buffer
          }
        }
      }
      
      if buffer is not empty {
        for each row in t3 {
          for each t1, t2 combination in join buffer {
            if row satisfies join conditions, send to client
          }
        }
      }

    2、索引join

    • 如果为连接列增加索引,则会通过索引匹配,而不需要到表里扫描
    • 比如A表JoinB表,A表为驱动表的情况下,如果B表的Join列有普通索引,则在外层循环(A表记录),里层循环(B表记录),替换里层循环的对象为索引,由于是普通索引,所以需要回表查询(相当于拿到主键ID之后还需要去遍历主键索引的B+树)
    • 如果上述的B表(非驱动表)的Join列是主键的话,则速度会更快,因为直接通过主键索引获取到数据,不需要再回表查询

    3、普通join(A表外层循环,B表内层循环,挨个匹配)

       如果啥都没有,那只能挨个去匹配了,但一般会用第一种。

  • 相关阅读:
    多态与异常处理课后作业
    Java接口与继承作业
    大道至简第六章随笔
    大道至简第五章随笔
    Java数组课程作业
    大道至简第四章随笔
    String课后作业
    大道至简第三章随笔
    Java语法基础动手动脑实践
    大道至简-第二章 心得体会
  • 原文地址:https://www.cnblogs.com/gabin/p/13720517.html
Copyright © 2011-2022 走看看