首页 > 其他分享 >[15-445]Join Algorithms memo (Join 为什么要用小表做驱动表)

[15-445]Join Algorithms memo (Join 为什么要用小表做驱动表)

时间:2022-12-01 02:00:09浏览次数:47  
标签:join 小表 memo 扫描 Join 数据 我们 hash

Nested Loop Join

这一章节主要讲解 join 的算法,我想记录一些重点的地方。有趣的是 关于 Nested Loop join 对驱动表为什么小表会更好这个问题,搜遍简中的 blog 都是一些错误的描述而且排名还贼高。而且大家都是互相拷贝。。互相抄内容,错来错去都差不多。

 

我们基于上面的数据集来探讨这个问题。并且我们暂时假设,我们不会使用到任何索引。

首先需要申明一个重要的点,那些有问题的描述多数在讨论外表有多少行,内部表有多少行。然后为了减少连接次数,所以我们应该在外部用小表作为驱动表去驱动内部的表可以减少连接次数。

这个说法,也不能说不对,但是他肯定不完全对。怎么来定义一个小表,我们不只用行数。因为我们真正在读取数据的时候我们读的是 数据页 行是数据的延伸是 tuple。所以归根到底如果我们要 follow 上面的说法

我们应该说我们应该在外部尽量少的扫描数据页,这样可以减少连接消耗。而不是数据行。

同时我们还需要意识到一点,减少连接消耗的本质。。其实就是减少数据页的扫描。

如果我们拿 R 表做外表 S 表做内部表我们需要扫描的数据总数大概是 

M + (m * N)

如果我们拿 S 表做外部表 R 表做内部表我们需要扫描的总数大概是 

N + (M * n)

如下图

 

这样可以看出来,即使我们使用最笨的办法,但是我们将小表放在外面,依然是可以节省不少 io 的。

我们外部 for 循环遍历 500page 然后拿着每一条 40000 * 每一条扫一次 page,R 表有 1000 个 page。数据就是这么来的。

 

那么有没有更好的办法呢

标签:join,小表,memo,扫描,Join,数据,我们,hash
From: https://www.cnblogs.com/piperck/p/16940286.html

相关文章

  • useCallback与useMemo使用场景
    为什么需要useCallback和useMemo当父组件props或者state变化时会引起父组件和该父组件所属子组件re-render,注意:即使子组件没有依赖父组件的state或者依赖的state没有变......
  • react常用hook中useMemo的使用
     作用:首先useMemo它使用来做缓存用的,只有当一个依赖项改变的时候才会发生变化,否则拿缓存的值,就不用在每次渲染的时候再做计算useMemo主要用来解决使用Reacthooks产生的......
  • CS149MemoryConsistency
    MemoryConsistency和MemoryOrder这节课实际上解决了我一直以来非常困惑的一个问题,Memoryorder到底是个啥。因为之前使用到atomic之类的cpp库,一直困惑里面涉及的Memory......
  • ReadProcessMemory函数的分析
    ReadProcessMemory函数用于读取其他进程的数据。我们知道自远古时代结束后,user模式下的进程都有自己的地址空间,进程与进程间互不干扰,这叫私有财产神圣不可侵犯。但windows里......
  • 解决因为错误退出导致ORA-01034: ORACLE not available ORA-27101: shared memory rea
    登录dba用户sqlplussys/12345assysdba;回车再输入startup,回车.这步是启动oracle服务。如果startup启动被告知已经启动了,可以先输入shutdownimmediate;等shutdown结束......
  • dfs + memo
    1359. CountAllValidPickupandDeliveryOptionsHard1674150AddtoListShareGiven n orders,eachorderconsistinpickupanddeliveryservices. Cou......
  • 【字符串】最小表示法
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:899.有序队列​​​​解:​​一、概念最小表示法是用于解决字符串最小表示问题的方法。循环同构:当字符串S中......
  • 连表操作join 子查询 SQL补充 数据库软件navicat pymysql模块
    目录多表查询的两种方法方式1:连表操作方式2:子查询SQL补充知识点1.分组之前字段拼接concatconcat_ws2.SQL执行判断条件exists3.表相关SQL补充修改表名altertable.........
  • java.lang.OutOfMemoryError: Java heap space读取文件时出现这个异常
    exceptionorg.apache.jasper.JasperException:javax.servlet.ServletException:java.lang.OutOfMemoryError:Javaheapspaceorg.apache.jasper.servlet.JspServletW......
  • CentOS6上python2.7安装memory_profiler报错
    由于我们需要分析python程序的内存占用问题,于是准备安装memory_profiler这个工具,但安装过程中各种报错,以下是安装报错截图和解决过程。1、安装/usr/local/python27/bin......