我当前使用NOT EXISTS从db2远程服务器复制数据以保持本地表的更新。该过程每周仅在1天之内执行。问题是,如果不对其进行缓存,则要花费40多秒的时间来执行它。
基本上,我需要按2列(引用和UAP(生产单位))插入记录,其中1个引用可以具有许多UAP。我假设查询由于在where子句上的两个条件而变慢。
$XmlDocument.CommChannelQueryResponse.CommChannel |
Format-Table -Property @{L="Name";E={$_.ChannelName}},
@{L="Filename";Expression={
$_.AdapterAttribute.Value | Where-Object $_.AdapterAttribute.Name = "Filename"
}}
如何提高性能?还是有比不存在的更快的选择?
此外,openquery每周平均返回2k条记录,但是大多数记录始终相同。
最终结果
这是最终解决方案。我使用了@scsimon
所建议的表变量ALTER PROCEDURE CopyReferenciasFromPDP
AS
BEGIN
DECLARE @NumTurnos int,
@NumPab int,
@AlcanceAbastecimento int,
@QtdMin int,
@QtdMax int
SET @NumTurnos = 3
SET @NumPab = 6
SET @AlcanceAbastecimento = 3
SET @QtdMin = 3
SET @QtdMax = 12
INSERT INTO Parametros
SELECT
Referencia,
UAP,
@NumTurnos AS NumTurnos,
@NumPab AS NumPAB,
@AlcanceAbastecimento AS AlcanceAbastecimento,
@QtdMin AS QtdMin,
@QtdMax AS QtdMax
FROM OPENQUERY(MACPAC,
'SELECT
A.RH6001 as Referencia,
A.RH6002 as UAP
FROM AUTO.D805DATPOR.TRP060H AS A
WHERE (A.RH6001 Not Like ''FS%'')
AND A.RH6030 <> 0') M
WHERE
NOT EXISTS
(
SELECT * FROM Parametros P
WHERE M.Referencia = P.Referencia
AND M.UAP = P.UAP
)
END
编辑
已将表变量更改为临时表