我有一个临时表,它已作为计划的批处理脚本的一部分进行更新。
让我们将此表称为Staging_Table
现在,我每天使用来自Staging_Table的条目更新一个称为Product_Table的表。我需要删除Products_Table中没有暂存表中条目的行。
现在,为了使事情复杂化,登台表可容纳约97000条记录,而生产表只有7000条记录。但是,每天,登台表中的条目将增加97000条。对于这些产品,我有一个称为TDC_IDP_ID ...的钥匙。
所以我有这个查询似乎要永远执行...
DELETE FROM Product_Table
WHERE PRODUCT_TD_PARTCODE NOT IN ( SELECT TDC_TD_PARTCODE FROM Staging_Table WHERE TDC_IDP_ID = @TDC_IDP_ID )
现在内部查询有97000条记录。我如何优化此查询(至少运行)或有另一种方法可以解决此问题?而不是选择我尝试以下查询,并且当我键入此问题时它仍在运行。它已经运行了11分钟。
SELECT COUNT(*)
FROM Product_Table
WHERE PRODUCT_TD_PARTCODE NOT IN ( SELECT TDC_TD_PARTCODE FROM Staging_Table WHERE TDC_IDP_ID = @TDC_IDP_ID )
首先,将索引改写为not exists
:
DELETE FROM Product_Table
WHERE NOT EXISTS (SELECT 1
FROM Staging_Table st
WHERE st.TDC_IDP_ID = @TDC_IDP_ID AND
st.TDC_TD_PARTCODE = product_table.PRODUCT_TD_PARTCODE
);
然后,您需要登台表上的索引:
create index idx_Staging_Table_2 on Staging_Table(TDC_TD_PARTCODE, TDC_IDP_ID);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句