使用CTE减少统计子查询
Set Statistics IO ON
SET STATISTICS TIME ON
--/*
--原来语句
DECLARE @CkNo nvarchar(4000),@ProWarn int,@SkuWarn int
select @CkNo='D1070',@ProWarn=0,@SkuWarn=0;
Select Count(0) From (Select Cak.Pro_Id from Ck_AreaKuc as Cak
Where AreaType=1 and Cak.CkNo=@CkNo and Cak.Pro_Id in (Select Pro_Id from Pro_List where On_Off_Sale = 0) and Cak.Pro_Id in (select Pro_Id from Ck_Pro_List where CkNo=@CkNo and ProStatus=0 )
Group By Cak.CkNo,Cak.Pro_Id Having IsNull(Sum(Cak.Quantity),0)-IsNull(Sum(Cak.ZyQuantity),0)-(Select IsNull(Sum(Pkul.Pro_Count),0) From Pro_Kuc_Used_List as Pkul Where CkNo=Cak.CkNo and Pro_Id=Cak.Pro_Id)<@ProWarn
or IsNull(Sum(Cak.Quantity),0)-IsNull(Sum(Cak.ZyQuantity),0)-(Select IsNull(Sum(Pkul.Pro_Count),0) From Pro_Kuc_Used_List as Pkul Where CkNo=Cak.CkNo and Pro_Id=Cak.Pro_Id)<(Select IsNull(Sum(ProWarn),0) from Ck_InventoryWarn as Ciw where Ciw.WarnType=1 and Ciw.CkNo=Cak.CkNo and Ciw.Pro_Id=Cak.Pro_Id)
) as A
--*/
go
--改为cte表达式
DECLARE @CkNo nvarchar(4000),@ProWarn int,@SkuWarn int
select @CkNo='D1070',@ProWarn=0,@SkuWarn=0;
WITH
cteZy AS
(
SELECT Pro_Id,IsNull(Sum(Pkul.Pro_Count),0) zyQtyused FROM
Pro_Kuc_Used_List as Pkul Where CkNo=@CkNo GROUP BY Pro_Id
),
cteArea AS
(
Select Cak.Pro_Id ,IsNull(Sum(Cak.Quantity),0) Quantity,IsNull(Sum(Cak.ZyQuantity),0) ZyQuantity from Ck_AreaKuc as Cak
Where AreaType=1 and Cak.CkNo=@CkNo and Cak.Pro_Id in (Select Pro_Id from Pro_List where On_Off_Sale = 0) and Cak.Pro_Id in (select Pro_Id from Ck_Pro_List where CkNo=@CkNo and ProStatus=0 ) Group By Cak.Pro_Id
),
cteWarn AS
(
Select Pro_Id,IsNull(Sum(ProWarn),0) ProWarn from Ck_InventoryWarn as Ciw where Ciw.WarnType=1 and Ciw.CkNo=@CkNo Group By Pro_Id
)
Select Count(0) From cteArea LEFT JOIN cteZy ON cteArea.Pro_Id = cteZy.Pro_Id LEFT JOIN cteWarn ON cteArea.Pro_Id = cteWarn.Pro_Id
WHERE Quantity-ZyQuantity-ISNULL(zyQtyused,0)< @ProWarn OR Quantity-ZyQuantity-ISNULL(zyQtyused,0)< ProWarn
对比:
1. 原来语句
SQL Server 分析和编译时间:
CPU 时间 = 391 毫秒,占用时间 = 475 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(1 行受影响)
表 'Ck_InventoryWarn'。扫描计数 7028,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Pro_Kuc_Used_List'。扫描计数 14056,逻辑读取 28116 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Ck_AreaKuc'。扫描计数 1,逻辑读取 502 次,物理读取 5 次,预读 504 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Pro_List'。扫描计数 1,逻辑读取 21 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Ck_Pro_List'。扫描计数 1,逻辑读取 46 次,物理读取 3 次,预读 57 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 359 毫秒,占用时间 = 518 毫秒。
2. 改为cte表达式
SQL Server 分析和编译时间:
CPU 时间 = 547 毫秒,占用时间 = 1109 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(1 行受影响)
表 'Ck_InventoryWarn'。扫描计数 87,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Ck_Pro_List'。扫描计数 1,逻辑读取 46 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Ck_AreaKuc'。扫描计数 87,逻辑读取 3349 次,物理读取 72 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Pro_List'。扫描计数 0,逻辑读取 174 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Pro_Kuc_Used_List'。扫描计数 1,逻辑读取 4 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
SQL Server 执行时间:
CPU 时间 = 484 毫秒,占用时间 = 1225 毫秒。
3. 结论
没有了子查询,Ck_InventoryWarn表和Pro_Kuc_Used_List表逻辑读会明显减少。
使用CTE减少统计子查询的更多相关文章
- Sqlserver 使用CTE如何按子查询排序?
需求:查出最近有更改的客户信息(按最后更改时间排序,来自SystemLog表LogDateTime字段) 说明: Customer:客户信息表SystemLog:系统日志表,记录所有表信息的增,删,改 ...
- 子查询in和表连接效率
在数据查询时,尽量减少in子查询而使用表连接的方式进行,效率更高.
- SQL夯实基础(四):子查询及sql优化案例
首先我们先明确一下sql语句的执行顺序,如下有前至后执行: (1)from (2) on (3) join (4) where (5)group by (6) avg,sum... (7 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- sql中with的用法(CTE公用表表达式):应用子查询嵌套,提高sql性能
一.WITH AS的含义 WITH AS短语,也叫子查询部分(subquery factoring),定义一个SQL片断,该片断会被整个SQL语句所用到. 有时是为了让SQL语句的可读性更高些,也可能 ...
- MYSQL 查询方法 统计查询 链接查询 子查询
mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as ...
- SQL Server温故系列(3):SQL 子查询 & 公用表表达式 CTE
1.子查询 Subqueries 1.1.单行子查询 1.2.多行子查询 1.3.相关子查询 1.4.嵌套子查询 1.5.子查询小结及性能问题 2.公用表表达式 CTE 2.1.普通公用表表达式 2. ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- postgresql子查询优化(提升子查询)
问题背景 在开发项目过程中,客户要求使用gbase8s数据库(基于informix),简单的分页页面响应很慢.排查发现分页sql是先查询出数据在外面套一层后再取多少条,如果去掉嵌套的一层,直接获取则很 ...
随机推荐
- 用C#通过正则表达式截取字符串中符合条件的子字符串
仅仅作为简单的记录,不多说直接上代码(仅测试使用): private void Test() { Regex ConnoteA = new Regex("^[a-zA-Z]\\d{8}$&q ...
- webrtc的音频处理模块apm( audio processing)下载与编译出libwebrtc_audio_preprocessing.so
webrtc代码在android和chromium项目中都有.但是android中的那个带有Android.mk,稍微修改下就能用ndk-build编译出libwebrtc_audio_preproc ...
- .NET Oracle Developer的福音——ODP.NET Managed正式推出
在.NET平台下开发Oracle应用的小伙伴们肯定都知道一方面做Oracle开发和实施相比SqlServer要安装Oracle客户端(XCopy.自己提取相关文件也有一定复杂性),另一方面相比JAVA ...
- 浅谈JAVA设计模式
没有万行的代码量,就不要想搞清楚设计模式.目前本人代码量大约在六千五百行,2016年需要继续努力,尽快完成万行之约. 工作之余需要,下面提前简单讨论一下设计模式. 创建型模式,共五种:工厂模式.抽象工 ...
- 【资源】NOIP2013测试数据senior/junior 普及/提高 数据
https://yunpan.cn/cRSepfcG4XX3V 访问密码 48e1 NOIP2013测试数据senior/junior 普及/提高 数据都在了
- PKUSC2016
day x(x<0) 外出培训倒数第二天晚上发烧了....逃过了第二天早上的考试,orz 抢到rank 1 的commonc神犇!! day 0 下午到了北大,发了两张50元饭卡.这是第三次来北 ...
- Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel", referenced from: objc-class-ref in The49DayPersonalRoomGiftModel.o ld: symbol(s) not found for a
Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_The49DayPersonalFullscreenGiftModel&q ...
- Openfire3.9.3源代码导入eclipse中开发配置指南
这篇文章向大家介绍一下,如何把openfire3.9.3源码导入eclipse中,编译并启动的详细过程. 首先得感谢这篇文章的作者,http://www.micmiu.com/opensource/o ...
- LaTex编译错误
Error Launching Console Application PDFTeXify ... Command Line: gbk2uni.exe "XXX" Startup ...
- 第九周 psp
团队项目PSP 一:表格 C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论用户界面 9:50 12:45 35 45 80 分析与 ...