三、连接查询部分

--------------------嵌套循环--------------------
/*
UserInfo表数据少、Coupon表数据多 嵌套循环可以理解为就是两层For循环,外层For会循环其中的每一项,内层For进行匹配, 相应的外层For对应外部输入表,执行计划的图示排在上面,内层For对应内部出入表,执行计划的图示排在下面, 外部表每一行都要使用来匹配,而内部表却不一定每一行都在匹配中被使用,所以, 1、外部表输入越小越好,也可以利用索引来减少输入行数 2、内部表匹配则可以利用索引来减少匹配条件的范围,尽快获取匹配行 3、多大多数情况下,查询优化器会自动更替结果集小的表为外部,大的为内部 当两个Join的表外部输入结果集比较小,而内部输入所查找的表非常大时,查询优化器更倾向于选择循环嵌套方式。
*/
SELECT * FROM dbo.UserInfo AS u INNER JOIN dbo.Coupon AS c ON u.Id = c.UserId

 
--------------------合并连接--------------------
/* UserInfo表数据少、Coupon表数据多
不同于循环嵌套的是,合并连接是从每个表仅仅执行一次访问,对于两个输入列都有序的情况下,合并连接的效率更高, 其中排序的的重要性毋庸置疑了,B树中的叶层就是按照一定的逻辑顺序维护的。也就是说,聚集索引和非聚集覆盖索引, 都可以通过对叶层的有序扫描以较小的代价就可以获取有序的数据。在这种情况下,就算输入表的规模比较大,合并联接也相当给力。 如果计划分析器确定连接的一侧记录集中的元素是唯一确定的,那么就会采用一对多的匹配方式(多指另一侧的元素会有重复), 在这种情况下,合并排序效率应该是几种连接方式中最高的。但如果所需的数据列并不存在上述的条件的时候,对于较大的输入来说排序 往往是一个开销非常大的操作(因为基于比较的排序最快也就是n log n的),因此优化器通常不会在这种情况下选用合并联接。 但是对于较小的输入排序的消耗还是可以接受的。合并连接需要双方有序,并且要求join的条件为等号,如果输入数据的双方无序, 则查询分析器不会选择合并连接,我们也可以通过索引提示强制使用合并连接,这就是SQL语句为什么要加OPTION(MERGE JOIN)的原因
*/
CREATE NONCLUSTERED INDEX Index_Coupon_UserId ON dbo.Coupon(UserId)
--DROP INDEX Index_Coupon_UserId ON dbo.Coupon SELECT * FROM dbo.UserInfo AS u INNER JOIN dbo.Coupon AS c ON u.Id = c.UserId --OPTION(MERGE JOIN)

 
--------------------哈希连接--------------------
/*
散列连接同样仅仅只需要只访问1次双方的数据。散列连接通过在内存中建立散列表实现。
这比较消耗内存,如果内存不足还会占用tempdb。但并不像合并连接那样需要双方有序。
删除掉UserInfo的主键及其中的聚集索引,在执行以下SQL要删除掉聚集索引,否则两个有序输入SQL Server会选择代价更低的合并连接。
SQL Server利用两个上面的输入生成哈希表,下面的输入来探测,可以在属性窗口看到这些信息,
通常来说,所求数据在其中一方或双方没有排序的条件达成时,会选用哈希匹配。
*/
ALTER TABLE dbo.UserInfo DROP CONSTRAINT PK_UserInfo_Id --删除主键 --DROP INDEX Index_UserInfo_Name --删除聚集索引 --ALTER TABLE dbo.UserInfo ADD CONSTRAINT PK_UserInfo_Id PRIMARY KEY CLUSTERED(Id) --创建主键 SELECT * FROM dbo.UserInfo AS u INNER JOIN dbo.Coupon AS c ON u.Id = c.UserId

 
--------------------多表并行--------------------
/*
当多个表连接时,SQL Server还允许在多CPU或多核的情况下允许查询并行,这样无疑提高了效率。
*/
SELECT * FROM dbo.UserInfo AS u INNER JOIN dbo.Coupon AS c ON u.Id = c.UserId INNER JOIN dbo.OneWayAirPolicy_20w AS o ON u.Id = o.PId

学习如何看懂SQL Server执行计划(三)——连接查询篇相关推荐

  1. MySQL进阶之路(二十)—— 5分钟看懂SQL的执行计划

    5分钟看SQL的执行计划 一.概述 ​ 如果你想优化SQL语句,那么SQL执行计划就是必须要知道的,因为只有通过SQL的执行计划,你才可以知道SQL是如何进行查询的,以及否走索引.用的是什么索引.是否 ...

  2. 剖析SQL Server执行计划

    -->Title: 淺議SQL Server执行计划 -->Author: wufeng4552 -->Date :2009-10-20 15:08:24 前言: 最近溫習了執行計劃 ...

  3. 引用:初探Sql Server 执行计划及Sql查询优化

    引用:初探Sql Server 执行计划及Sql查询优化 原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之-- ...

  4. 如何看懂Postgres的执行计划

    如何看懂Postgres的执行计划test=# insert into test select id from (select generate_series(1,10000000))ids(id); ...

  5. SQL Server 执行计划(8) - 使用 SQL 执行计划进行查询性能调优

    在本系列的前几篇文章(见底部索引)中,我们介绍了SQL 执行计划的多个方面,我们讨论了执行计划是如何在内部生成的,不同类型的计划,主要组件和运算符以及如何阅读和分析使用不同工具生成的计划.在本文中,我 ...

  6. SQL Server 执行计划缓存

    原文:SQL Server 执行计划缓存 标签:SQL SERVER/MSSQL SERVER/数据库/DBA/内存池/缓冲区 概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储 ...

  7. SQL Server执行计划那些事儿(3)——书签查找

    接下来的文章是记录自己曾经的盲点,同时也透漏了自己的发展历程(可能发展也算不上,只能说是瞎混).当然,一些盲点也在工作和探究过程中慢慢有些眉目,现在也愿意发扬博客园的奉献精神,拿出来和大家分享一下. ...

  8. SQL Server执行计划面试问题

    In this article, we will discuss a few very common questions that you may be asked during a SQL Serv ...

  9. 一文搞定 SQL Server 执行计划

    导读 数据开发过程中,开发完成的 SQL 发布到生产环境,经常会发生 SQL 执行慢甚至根本无法执行,如何避免这种情况呢?这一篇我们分析一下 SQL Server 的执行计划是如何生成及如何阅读评估执 ...

最新文章

  1. slowquery 慢查询
  2. 慢动作输出 Linux 命令结果并用彩色显示
  3. linux的fork语句,Linux C/C++——fork()函数基础
  4. IIS中WEB服务器的日志存放到SQL Server 2005中
  5. gitlab+svn自动增量发包
  6. 用云原生的思维践行云原生,华为云深耕数字化,一切皆服务
  7. torch中Dataset的构造与解读
  8. 夜晚较为活跃之物种对照图
  9. [原创]独立模式安装Hive
  10. AMESim 14.0 win10环境下安装教程
  11. 这款完全开源可自主DIY的小程序商城太强大了,直接可给客户搭建赚米
  12. MDUI登陆注册案例
  13. 深度学习入门之txt文本文件转换为npz文件
  14. 关于matlab运行的一些报错迷惑
  15. 度分秒怎么计算加减乘除?
  16. 怎样用计算机将二进制转换成十进制,二进制如何转换为十进制?
  17. html文本转成二进制,肿么把文本文件转换成二进制bin文件
  18. 电脑查询域名对应IP的过程
  19. Java入门 技术总结
  20. 魔方(9)四轴枫叶魔方、四轴斜转魔方

热门文章

  1. zabbix学习(四)IT_Service管理
  2. ZTE-中兴捧月-北京线下测试赛--B题
  3. 准IT工作者如何择师、如何学习
  4. 【转】解决 java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I 问题
  5. Linux KVM虚拟网络的桥接
  6. Windows Tips--How do I disable the Windows Firewall service?
  7. leetcode 72. 编辑距离
  8. java并发编程同步器 Semaphore、CyclicBarrier、Exchanger、CountDownLatch
  9. SpiderData 2019年2月13日 DApp数据排行榜
  10. 儿智展---国内首个少儿智能产品专业展11月登陆上海