博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再论一下in,exists,join
阅读量:6646 次
发布时间:2019-06-25

本文共 1861 字,大约阅读时间需要 6 分钟。

昨天的这篇文章提及到的一些问题,在这里我做一下自己的测试,测试结果以微软标准Adventureworks数据库内数据结构为准。

 

测试语句:

 

ContractedBlock.gif
ExpandedBlockStart.gif
Code
set statistics io on
set statistics time on
select a.* from Production.Product a inner join Production.ProductModel b
on (a.ProductModelID = b.ProductModelID)
select a.* from Production.Product a where exists (select 'X' from Production.ProductModel b
where a.ProductModelID = b.ProductModelID)
select a.* from Production.Product a where a.ProductModelID in (select b.ProductModelID from Production.ProductModel b)

 

测试统计:

 

ContractedBlock.gif
ExpandedBlockStart.gif
Code
SQL Server 分析和编译时间: 
   CPU 时间 
= 0 毫秒,占用时间 = 1 毫秒。
SQL Server 执行时间:
   CPU 时间 
= 0 毫秒,占用时间 = 1 毫秒。
SQL Server 分析和编译时间: 
   CPU 时间 
= 15 毫秒,占用时间 = 63 毫秒。
SQL Server 执行时间:
   CPU 时间 
= 0 毫秒,占用时间 = 1 毫秒。
SQL Server 执行时间:
   CPU 时间 
= 0 毫秒,占用时间 = 1 毫秒。
(
9440 行受影响)
表 
'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 
'Product'。扫描计数 1,逻辑读取 474 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 
'ProductModel'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(
1 行受影响)
SQL Server 执行时间:
   CPU 时间 
= 63 毫秒,占用时间 = 1984 毫秒。
(
9440 行受影响)
表 
'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 
'Product'。扫描计数 1,逻辑读取 474 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 
'ProductModel'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(
1 行受影响)
SQL Server 执行时间:
   CPU 时间 
= 78 毫秒,占用时间 = 1780 毫秒。
(
9440 行受影响)
表 
'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 
'Product'。扫描计数 1,逻辑读取 474 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 
'ProductModel'。扫描计数 1,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(
1 行受影响)
SQL Server 执行时间:
   CPU 时间 
= 109 毫秒,占用时间 = 1366 毫秒。
SQL Server 分析和编译时间: 
   CPU 时间 
= 0 毫秒,占用时间 = 1 毫秒。
SQL Server 执行时间:
   CPU 时间 
= 0 毫秒,占用时间 = 1 毫秒。

 

执行计划

 

可以看到无论是查询计划还是统计IO,都是一样的。

这都是优化器的功劳,并不存在哪个谓词就好些,除非你的测试环境是2000以下。

 

你可能感兴趣的文章
二维数组遍历的方式(for普通循环遍历、foreach循环遍历、toString方式遍历)
查看>>
递归神经网络RNN桨距控制控制风力发电机组
查看>>
R语言混合时间预测更好的时间序列点估计
查看>>
wireshark过滤规则(两年前记录在qq空间的日志)
查看>>
django基础-ORM操作
查看>>
javascript 关于倒计时与输入框选中状态的判断
查看>>
【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)
查看>>
jquery中html(), text(),val()区别
查看>>
Web前端开发推荐阅读书籍
查看>>
一个封装HTTP请求的函数(C++)
查看>>
[转]大话企业级Android应用开发实战 传感器
查看>>
.NET Core学习笔记(1)-初识
查看>>
判断是不是闰年
查看>>
抓取链接里数据并存入本地
查看>>
结对编程
查看>>
《从零開始学Swift》学习笔记(Day 46)——下标重写
查看>>
【网络安全】登录问题(一)Session/Cookie源码分析
查看>>
视图、序列、索引、同义词
查看>>
CMD 命令1
查看>>
HTML angular购物车
查看>>