调 SQL 服务器查询
Tune SQL Server query
我的目标是清除块中的数据,并考虑在将 ID_COl 值放入 #temptable 后对其进行循环。
DECLARE @PD datetime = DATEADD(day, -5, GETUTCDATE());
DELETE GP
FROM dbo.Table_A N
INNER JOIN dbo.Table_BL GP
ON N.NOTIF_ID = GP.NOTIF_ID
WHERE N.FCT_AUD_IND = 'Y'
AND N.CRE_TMST < @PD
AND EXISTS ( SELECT 1 ID_COl
FROM dbo.Table_A AS N1
WHERE N1.NOTIF_APPL_ID = N.NOTIF_APPL_ID
AND N1.SOR_NOTIF_APPL_GP_ID = N.SOR_NOTIF_APPL_GP_ID
AND N1.NOTIF_DLT_IND = 'Y');
你强迫 SQL 服务器做一个嵌套循环来查找 Table_A 中的记录,但也许 SQL 服务器当你让他决定并加入时会找到更好的方法相反:
DECLARE @PD datetime = DATEADD(day, -5, GETUTCDATE());
WITH N1 AS (
SELECT DISTINCT NOTIF_APPL_ID, SOR_NOTIF_APPL_GP_ID
FROM dbo.Table_A
WHERE NOTIF_DLT_IND = 'Y'
)
DELETE GP
FROM dbo.Table_A N
INNER JOIN N1 ON N.NOTIF_APPL_ID = N1.NOTIF_APPL_ID
AND N.SOR_NOTIF_APPL_GP_ID = N1.SOR_NOTIF_APPL_GP_ID
INNER JOIN dbo.Table_BL GP ON N.NOTIF_ID = GP.NOTIF_ID
WHERE N.FCT_AUD_IND = 'Y'
AND N.CRE_TMST < @PD
此外,定义索引可能会有帮助。
我的目标是清除块中的数据,并考虑在将 ID_COl 值放入 #temptable 后对其进行循环。
DECLARE @PD datetime = DATEADD(day, -5, GETUTCDATE());
DELETE GP
FROM dbo.Table_A N
INNER JOIN dbo.Table_BL GP
ON N.NOTIF_ID = GP.NOTIF_ID
WHERE N.FCT_AUD_IND = 'Y'
AND N.CRE_TMST < @PD
AND EXISTS ( SELECT 1 ID_COl
FROM dbo.Table_A AS N1
WHERE N1.NOTIF_APPL_ID = N.NOTIF_APPL_ID
AND N1.SOR_NOTIF_APPL_GP_ID = N.SOR_NOTIF_APPL_GP_ID
AND N1.NOTIF_DLT_IND = 'Y');
你强迫 SQL 服务器做一个嵌套循环来查找 Table_A 中的记录,但也许 SQL 服务器当你让他决定并加入时会找到更好的方法相反:
DECLARE @PD datetime = DATEADD(day, -5, GETUTCDATE());
WITH N1 AS (
SELECT DISTINCT NOTIF_APPL_ID, SOR_NOTIF_APPL_GP_ID
FROM dbo.Table_A
WHERE NOTIF_DLT_IND = 'Y'
)
DELETE GP
FROM dbo.Table_A N
INNER JOIN N1 ON N.NOTIF_APPL_ID = N1.NOTIF_APPL_ID
AND N.SOR_NOTIF_APPL_GP_ID = N1.SOR_NOTIF_APPL_GP_ID
INNER JOIN dbo.Table_BL GP ON N.NOTIF_ID = GP.NOTIF_ID
WHERE N.FCT_AUD_IND = 'Y'
AND N.CRE_TMST < @PD
此外,定义索引可能会有帮助。