合并到CTE与合并到Table

时间:2019-11-28 15:53:08

标签: sql sql-server sql-server-2012

我对合并到CTE 合并到表的性能存在疑问。

我的情况如下:

我在现有存储过程中遇到了一个问题,该过程负责将数据从暂存源表合并到表中。目标表有大约2000万条记录。
合并到 CTE 中,该CTE是按日期范围过滤的目标表的子集。此日期范围与源表的日期范围匹配。但是,由于逻辑实现不正确,源表有时也会包含超出日期范围的数据。这会导致将不必要的重复数据插入目标表。

现在已更正了存储过程中的逻辑,并且有望通过此更改解决此问题。但是,为确保不再发生此类问题,是否建议将其合并到表中而不是CTE中?考虑到目标表的大小(约2000万行),性能的权衡是什么?考虑到性能的观点,合并到表中的利弊是什么?

1 个答案:

答案 0 :(得分:0)

Microsoft建议不要使用CTE作为目标。

  

使用WITH子句从中过滤出行   源表或目标表。此方法类似于指定   ON子句中的其他搜索条件,可能会产生不正确的信息   结果。我们建议您避免使用此方法或进行测试   在实施之前进行彻底的研究。

有关详情,请参见:https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver15#join-best-practices

从性能的角度来看,我认为这不会有所作为。我从来没有测试过。