sql—如何增强查询以使其运行速度更快、时间更短?

kqlmhetl  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(396)

我在处理SQLServer2012查询时面临一个问题:运行查询时,只为一个部分返回10行
它需要50秒,我试图运行它在另一个时间可能是电脑有更多的负载
但只为一个零件返回10行需要50秒的时间。
50秒,10排,这是更多
我有10000个零件和记录相关的1500万,所以我需要提高性能是最好的
那么我该怎么做才能让查询在短时间内运行呢
我的问题是:
执行计划如下:

https://www.brentozar.com/pastetheplan/?id=HyclwfSev

我试图通过以下方式解决问题:

CREATE NONCLUSTERED INDEX index1 
ON [dbo].[Excel_DK] ([PartNumber]) INCLUDE ([ZPartId],[FeatureName],[Value])

但返回10行需要25秒,甚至更多
有什么办法可以提高绩效吗

kx5bkwkv

kx5bkwkv1#

从执行计划来看,临时表中的数据似乎是关于 ~ 400 000 排。最近,由于过滤(使用 INNER JOIN 以及 WHERE 子句)数据流减少到 10 排。
临时的table本身,似乎相当大 Estimate data size1 MB ,但实际情况是 28 MB .
在下一个屏幕截图上可以很容易地看到以上内容(检查每个块后面的行):

因此,您可以做的是在临时表中创建较小的版本,并预先应用筛选。例如:

SELECT FM.Z_FeatureID, FM.StatusId,FM.SplitFlag,FM.DkFeatureId,FM.separator,FM.separatororder
INTO #TEMP
from #getDeliveryConfiguration FM with(nolock)  
join [Excel_DK].dbo.Excel_DK DUFP with(nolock) on DUFP.FeatureName =FM.DK_Feature 
join [Z2DataCompanyManagement].[CompanyManagers].[Company] C with(nolock) on p.CompanyID = C.CompanyID
where C.CompanyName=@companyName And DUFP.PartNumber=@partNumber

然后更换 #TEMP 在原始查询中。当然,您可以尝试另一种筛选,但其思想是提前限制行,而不是从其他表中读取数据。

相关问题