在OpenQuery上SQL NOT EXISTS太慢

时间:2019-04-30 14:56:13

标签: sql-server

我当前使用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

编辑

已将表变量更改为临时表

0 个答案:

没有答案