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

本文共 1941 字,大约阅读时间需要 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以下。

 

转载于:https://www.cnblogs.com/perfectdesign/archive/2008/08/06/sql_exists_in.html

你可能感兴趣的文章
洛谷——P1596 [USACO10OCT]湖计数Lake Counting
查看>>
智力大冲浪
查看>>
虚拟机VMware 9安装苹果MAC OSX 10.8图文教程
查看>>
微信小程序开发-框架
查看>>
redo、undo、binlog的区别
查看>>
DropDownList 控制日期控件显示格式
查看>>
RecycleView设置顶部分割线(记录一个坑)
查看>>
汉字转拼音 (转)
查看>>
Machine Learning Techniques -6-Support Vector Regression
查看>>
会计基础_001
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
Jenkins持续集成环境部署
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
有趣的数学书籍
查看>>