sql Server 查询优化

本文介绍了一个具体的SQL查询优化案例,初始查询耗时2分钟,在经过逐步优化后,最终将耗时减少到10秒左右。优化过程中采用了union all替代子查询的方式,并针对不同条件进行了拆分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

t_FSHH_PartitionInfo表大概有10多万条数据,RdRecords大概3万条数据,刚开始使用如下语句执行时,大概耗时2分钟

Select p.* From t_FSHH_PartitionInfo p Where p.cLineID=2 and p.dQCVoucherDate Between '2016-03-01 00:00:00' And '2016-03-31 23:59:59' And
(	 	
	isnull(p.bReturn,'否')='是' or  exists(
		Select d.cdefine28 As cBarcode  From RdRecords d  Where p.cBarcode=d.cdefine28 
		group By  d.cdefine28 
		)
)

2分钟肯定是不能接受的,于是开始优化,最张将子查询的实现方式改为union all的查询方式,语句如下:

select p.* from t_FSHH_PartitionInfo p 
Where p.cLineID=2 and p.dQCVoucherDate Between '2016-03-01 00:00:00' And '2016-03-31 23:59:59' And
isnull(p.bReturn,'否')='是'
Union All
Select p.* From t_FSHH_PartitionInfo p Where p.cLineID=2 and isnull(p.bReturn,'否')!='是' 
And
 exists(
		Select d.cdefine28 As cBarcode  From RdRecords d Where p.cBarcode=d.cdefine28 --and r.dDate Between '2016-03-28 00:00:00' And '2016-03-28 23:59:59'
		group By  d.cdefine28 
		)

最后耗时变为10秒左右,这个速度仍然不够理想,不过已经比之前好多了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值