如何增强查询以使其 运行 更快更省时?
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 JOIN
和 WHERE
子句),数据流减少到 10
行。
临时的 table 本身似乎很大 - Estimate data size
是 1 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 中读取数据。
我在 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 JOIN
和 WHERE
子句),数据流减少到 10
行。
临时的 table 本身似乎很大 - Estimate data size
是 1 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 中读取数据。