这些天的学习,才发现自己对SQL原来是如此的不了解。之前一直以为自己轻松应对各种复杂的SQL查询,但是一旦提到效率上,可能就比较傻眼了,有时候也会埋怨客户的服务器不好使。

至于Inner Join的三种方式:loop,merge, hash,园子里面有很多文章,话说看多遍不如自己实际操作一遍。今天也来操作一番试试。说明:T(4)表中约有4.6万行数据,T(1)表中约有4.1万行数据

第一种:merge

declare @begin datetime
Declare @end datetime
set @begin = GETDATE()
set statistics io on
Select * From
dbo.[T(4)] inner merge join dbo.[T(1)] On
dbo.[T(4)].keyword0 = dbo.[T(1)].keyword0
set statistics io off
set @end = GETDATE()
print datediff(millisecond,@begin,@end)

  第二种:hash

Declare @begin datetime
Declare @end datetime
set @begin = GETDATE()
set statistics io on
Select * From
dbo.[T(4)] inner hash join dbo.[T(1)] On
dbo.[T(4)].keyword0 = dbo.[T(1)].keyword0
set statistics io off
set @end = GETDATE()
print datediff(millisecond,@begin,@end)

  两种SQL执行的结果分别显示:

(239657 行受影响)
表 'T(4)'。扫描计数 10,逻辑读取 3236 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 ''T(1)'。扫描计数 10,逻辑读取 3064 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 12,逻辑读取 430 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
耗时:22006

(239657 行受影响)
  表 ''T(4)'。扫描计数 10,逻辑读取 3236 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
  表 ''T(1)'。扫描计数 10,逻辑读取 3064 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
  表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
耗时:17026

从上可以看出,Merge比Hash多了一步操作,就是对Worktable的操作,多出的时间耗时应该就是在此处所消耗的。

CPU耗时分别如下:

(239657 行受影响)

SQL Server 执行时间:
   CPU 时间 = 12763 毫秒,占用时间 = 24520 毫秒。

(239657 行受影响)

SQL Server 执行时间:
   CPU 时间 = 11702 毫秒,占用时间 = 17587 毫秒。

本来还想查看下内存开销,结果不知道有啥好的方法可以查看内存开销。今天就先暂时到这,后续继续。

SQL Server2008 inner join多种方式的实践的更多相关文章

  1. SQL映射文件实现多种方式查询

    1.单条件查询在test中代码如下 2.多条件查询时需要把查询条件编辑为对象或者是集合传入,例如 通过对象进行查询 或者是通过集合进行查询列如Map集合 还有就是通过@Param注解实现多参数的入参, ...

  2. sql语句分页多种方式ROW_NUMBER()OVER

    sql语句分页多种方式ROW_NUMBER()OVER 摘自: http://www.cnblogs.com/CodingArt/articles/1692468.html 方式一 select to ...

  3. SQL Server数据库多种方式查找重复记录

    摘要:SQL Server是一个关系数据库管理系统,SQL Server数据库的应用是很多的,SQL Server数据库赢得了广大用户的青睐,本文将主要为大家介绍关于SQL Server数据库中查找重 ...

  4. sql语句分页多种方式

    sql语句分页多种方式ROW_NUMBER()OVER sql语句分页多种方式ROW_NUMBER()OVER 2009年12月04日 星期五 14:36 方式一 select top @pageSi ...

  5. Spark SQL在100TB上的自适应执行实践(转载)

    Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的接口来分布式处理结构化数据,在很多应用领域都有成功的生产实践,但是在超大规模集群和数据集上,Spark SQL仍然遇 ...

  6. SQL查询优化 LEFT JOIN和INNER JOIN

    作者:VerySky 推荐:陈敬(Cathy) SQL查询优化 LEFT JOIN和INNER JOIN 1,连接了八个数据库表,而且全部使用LEFT JOIN,如下所示: Resource_Reso ...

  7. Druid SQL和Security在美团点评的实践

    分享嘉宾:高大月@美团点评,Apache Kylin PMC成员,Druid Commiter 编辑整理:Druid中国用户组 6th MeetUp 出品平台:DataFunTalk -- 导读: 长 ...

  8. 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

    64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...

  9. Spring学习总结(一)——Spring实现IoC的多种方式

    控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...

随机推荐

  1. C++实现多组数据合并输出

    思路 假设有多组数据,每一组都是按从小到大的顺序输入的,设计如下数据结构 前面一列是每一组数据的首部,后面是真正的数据,首部的定义为: struct head { Node* next; head* ...

  2. java集合类的相关转换

    下面的的案例,基本上是以代码为主,文字的描述较少,后期有时间会继续添加. ArrayToList public void ArrayToList() { System.out.println(&quo ...

  3. vscode导入已存在的vue.js工程

    1.安装vue_cli 如果安装了npm,直接在命令行输入npm install -g vue-cli,安装在全局组件目录下 完成后,可以在命令测试下 2.导入工程 打开vscode-------&g ...

  4. 深入分析Java的编译期与运行期

    不知大家有没有思考过,当我们使用IDE写了一个Demo类,并执行main函数打印 hello world时都经历了哪些流程么? 想通过这篇文章来分析分析Java的执行流程,或者换句话说想聊聊Java的 ...

  5. 深入剖析PHP7内核源码(一)- PHP架构与生命周期

    PHP7 为什么这么快? 全新的zval 更节约的空间,栈上分配内存 zend_string 存储字符串的Hash值,数组查询的时候不需要进行Hash计算 在HashTable桶内直接存数据,减少了内 ...

  6. OpenResty 社区王院生:APISIX 的高性能实践

    2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,OpenResty 软件基金会联合创始人王院生在活动上做了&l ...

  7. CEF避坑指南(一)——下载并编译第一个示例

    CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ...

  8. Mybatis-Spring扫描路径有重叠导致Invalid bound statement(not found)问题

    背景 近日,某个系统的测试环境mybatis总是报Invalid bound statement(not found)异常,导致tomcat容器无法启动.异常信息如下: org.apache.ibat ...

  9. 在Docker for Windows中运行GUI程序

    Docker运行GUI原理 Docker目前大多应用在服务器领域,那么在Docker中可以运行GUI程序吗?怀着好奇心google了一番,还真有人写了一篇文章 running-gui-applicat ...

  10. Mongodb最基础入门教程

      Mongodb最基础入门教程 如果想了解一下redis的入门教程,可以去看一下我的上一篇博客 Mongodb的安装大家可以参考一下其他博主的博客,这里我就不做介绍了.不过值得注意的是,在Linux ...