如何增强查询以使其 运行 更快更省时?

How to enhance query to make it run fast and less time?

我在 SQL 服务器 2012 查询上工作 我遇到问题:当 运行 查询 return 10 行只有一个部分时

需要 50 秒我会尝试 运行 可能是 PC 有更多负载

但同时需要 50 秒才能 return 10 行只有一个部分。

10 行 50 秒更多

我有 10000 个零件和 1500 万个相关记录,所以我需要提高性能才能达到最佳状态

所以我做了什么来在短时间内进行查询运行

这是我的查询:

见下面的执行计划:

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

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

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

但 return 10 行需要 25 秒

有什么方法可以提高性能

从您的执行计划来看,您的临时 table 中的数据似乎是大约 ~ 400 000 行。最近,由于过滤(使用 INNER JOINWHERE 子句),数据流减少到 10 行。

临时的 table 本身似乎很大 - Estimate data size1 MB,但实际是 28 MB

在下一个屏幕截图中可以很容易地看到以上内容(检查每个块后的行):

因此,您可以做的是创建较小的临时版本 table 并提前应用过滤。例如:

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。当然,您可以尝试另一种过滤,但想法是提前限制行数,而不是从其他 table 中读取数据。