首页 > 解决方案 > 内部连接性能问题或条件

问题描述

我有一个返回 300 万条记录的 sp。现在它需要 16 分钟。我正在尝试优化它。因为加入它的时间有一个或条件。有没有办法优化它?

SELECT
    id, from
FROM
    [#Temp1] AD              
    JOIN [#Temp2]  SS
        ON AD.Id = SS.Id
        OR (SS.Code = AD.Code AND AD.ID IS NULL)        
JOIN wTable1 WSS WITH(NOLOCK)               
    ON SS.PId= WSS.Id

标签: sqlsql-serverquery-performancestored-functions

解决方案


通常最好的方法是使用left joins:

select id, 
       coalesce(wss1.col, wss2.col) as col
from [#Temp1] AD left join            
     [#Temp2] SS1
     ON AD.Id = SS1.Id left join
     [#Temp2] SS2
     ON SS2.Code = AD.Code AND AD.ID IS NULL LEFT JOIN
     wTable1 WSS1            
     ON WSS1.Id = SS1.PID LEFT JOIN
     wTable1 WSS2
     ON WSS2.ID = SS2.PID
WHERE SS1.ID IS NOT NULL OR SS2.CODE IS NOT NULL;  -- one of the joins works  

我不能保证这适用于您的具体情况,因为您没有提供样本数据和所需的结果。但是,这种方法在类似情况下确实有效。


推荐阅读