1、Hash Match Join

Hash运算(即散列算法) 和Hash表。

Hash运算是一种编程技术,用来把数据转换为符号形式,使数据可以更容易更快速地被检索。例如,表中的一行数据,可以通过程序转化为一个唯一的值,这个值就代表了这行数据的内容。这和数据加密很类似,一个hash值同样也可以被转换回原始数据。

Hash表是一个数据结构,它把所有的元素都切分成同等大小的“类”或“块”,允许对这些元素的快速访问。hash函数决定了元素应该进入哪个“块”。例如,你可以从表里取出一行数据,将其转换为hash值,然后将hash值存入hash表。

Hash Match Join 发生时,Sql Server连接一大一小两张表,对小表里的数据行进行hash运算,将生成的hash值插入到hash表里,然后遍历大表里的数据,每次取出一行在hash表里寻找匹配的行。对小表进行hash运算是为了降低hash表的大小,hash值可以进行快速的比较。如果两张表都很大,那么hash match jion和其他类型的join比起来就非常低效。

Hash Match Join对大数据集尤其是其中一个表比另外的一个小很多的时候效率很高。对表没有按照join列排序或者表中没有可用索引的情况,hash match join也是很有效的方式。

Hash Match Join的出现也可能意味着存在更高效的连接方式(Nested Loop或Merge),这可能是以下原因造成的:
  1.索引缺失或者索引不正确
  2.where语句缺失
  3.where语句里有对索引列的计算或转换使得索引失效
在这些情况下,优化器认为Hash Match Join是连接两张表的最高效的方式,但是有可能可以通过增加索引、或者增加where语句来减少数据量等方式获得更高效的查询。

2、Nested Loop Join

顾名思义,Nested Loop Join这个操作使用嵌套双层循环,在我们这个计划里下边这个(17%那个)运算符的结果在外层。由于两个数据集都很小,所以这是个很高效的操作。只要内层数据集小,外层数据集(小不小不要紧)有索引的情况下,Nested Loop Join是一种非常高效的连接机制。除非数据集超大,这种连接方式应该是你最希望看到的连接方式。

3、Merge Join

使用Merge Join连接的两张表必须是按照连接列预先排序好了的,这中情况下Merge Join是一种高效的连接方式。如果连接的表没有按照连接列预先排序的话,查询优化器要么先排序再执行Merge Join, 或者执行效率稍低些的Hash Match Join。

SQL Join 的三种类型的更多相关文章

  1. Spark SQL join的三种实现方式

    引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...

  2. SQL提交数据三种类型

    在数据库的插入.删除和修改操作时,只有当事务在提交到数据库时才算完成. SQL语句提交数据有三种类型:显式提交.隐式提交及自动提交. [1]显式提交 显式提交.即用COMMIT命令直接完成的提交方式. ...

  3. SQL及常见的三种类型注释

    SQL(Structure Query Language)语言是数据库的核心语言. SQL的发展是从1974年开始的,其发展过程如下:1974年-----由Boyce和Chamberlin提出,当时称 ...

  4. SQL语言的四种类型

    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHE ...

  5. 链路层三种类型的MAC地址

    若需要转载,请注明出处. 我们知道,链路层都是以MAC地址来进行通信双方的地址标识的,如下图:在应用中根据接收方的多寡来进行划分,可分为以下三种: 单播(Unicast) 多播(Multicast) ...

  6. matlab for循环的三种类型

    学习了一半了,发现一个好网站,就是我想写这篇博客用的,网络真是个好东西!纪念下国庆啦 网址:http://www.yiibai.com/matlab/matlab_for_loop.html ---- ...

  7. C# enum、int、string三种类型互相转换

    enum.int.string三种类型之间的互转 #代码: public enum Sex { Man=, Woman= } public static void enumConvert() { in ...

  8. 缓慢变化维 (Slowly Changing Dimension) 常见的三种类型及原型设计(转)

    开篇介绍 在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库 ...

  9. ASP.NET 设计模式分为三种类型

    设计模式分为三种类型,共23类.  一.创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式.      二.结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代 ...

随机推荐

  1. Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络

    1: 安装windows server 2008 R2 中文版 (过程略) 安装完成后设置机器名和IP地址, 本过程机器名 crm5dev,192.168.0.110 dns: 192.168.0.1 ...

  2. HDU5643-King's Game

    BestCoder上的题,直接贴网站上的题目和题解了.很棒的题. 问题描述为了铭记历史,国王准备在阅兵的间隙玩约瑟夫游戏.它召来了 n(1≤n≤5000) 个士兵,逆时针围成一个圈,依次标号 1,2, ...

  3. 最短路变形 poj3615&

    问题: 牛要跨过一些障碍,希望以最小的体力跨过障碍,并且对于一条路径,只在乎其中最高的障碍. 输入N代表站点数,标记为1—N,输入M代表路径数,从站点S到E之间需要跨过高度为H的障碍. 输入T代表牛要 ...

  4. 导入excel数据

    前提条件:先要安装好EXCEL软件. 程序中经常要用到导入excel数据的功能.其实通过ole操作excel就简单的几行代码,但记性不好,经常要用经常要找, 还是作篇笔记吧. var ExcelApp ...

  5. position与anchorPoint

    相信初接触到CALayer的人都会遇到以下几个问题: 为什么修改anchorPoint会移动layer的位置?CALayer的position点是哪一点呢?anchorPoint与position有什 ...

  6. JavaScript- 图片无缝滚动

    图片向上.向下.向左.向右不间断无缝滚动. 图片向下滚动: <div id="colee" style="overflow: hidden; height: 253 ...

  7. Step2:配置Oracle Dataguard

    接着step1我用Rman duplicate测试下. 1,2两步请参考step1中的1,2 3.startup nomount (standby),一定要是nomount. 4.rman dupli ...

  8. HTTPResponse.read([amt]):只能read一次

    业务需要:我要写个tanx模拟器,给DSP发竞价请求. 下面是部分代码: def PostDataToDSP(self,url,postdata): headers = { 'Content-Type ...

  9. Yum出错Error: Cannot find a valid baseurl for repo: base(转)

    centos yum 错误 Error: Cannot find a valid baseurl for repo: base 装了个CentOS 6.x,使用yum时出现了下面的错误提示.Loade ...

  10. 标准I/O库之格式化I/O

    本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 一.格式化输出 执行格式化输出处理的是4个pr ...