在SQL Server中查询需要很长时间

时间:2018-03-03 08:45:07

标签: sql-server

以下查询需要更多时间才能给出结果。这个查询在exists子句内部运行,而且这个查询还有stuff函数。有没有办法优化或重写这个查询?。

AND EXISTS(SELECT 1 
           FROM 
               (SELECT DISTINCT
                    F_ALIAS,
                    F_DATA_CODE,
                    STUFF((SELECT ', ' + A.F_DATA
                           FROM T_REP_DATA A
                           WHERE A.F_ALIAS = RPDS.F_ALIAS
                             AND A.F_DATA_CODE = RPDS.F_DATA_CODE
                             AND '1:WVTST{PROD006' = A.F_ALIAS
                           FOR XML PATH(''), TYPE).value( '.', 'NVARCHAR(MAX)'), 1, 2, '') F_DATA
                FROM T_REP_DATA RPDS
                INNER JOIN 
                    (SELECT DISTINCT F_CUSTOM2 
                     FROM T_MSDSTYPES 
                     WHERE (F_CUSTOM2 IS NOT NULL AND F_CUSTOM2 != '')) MT ON MT.F_CUSTOM2 = RPDS.F_DATA_CODE and RPDS.F_ALIAS = '1:WVTST{PROD006') RPDS_CUSTOM2)             
           WHERE RPDS_CUSTOM2.F_DATA LIKE 'MANU'

1 个答案:

答案 0 :(得分:4)

你的查询可能根本不正确(LIKE 'MANU'实际上意味着= 'MANU'),但是你的查询可能正在做(或者应该做)只不过:

AND EXISTS(
  SELECT 1 
  FROM T_REP_DATA RPDS
  INNER JOIN T_MSDSTYPES MT
    ON MT.F_CUSTOM2 = RPDS.F_DATA_CODE
  WHERE RPDS.F_ALIAS = '1:WVTST{PROD006'
    AND RPDS.F_DATA = 'MANU'
)

更具体的答案需要更多细节。