说我有一个MERGE语句,看起来像这样:SQL Server是否足够聪明,在真正需要时不会执行IO操作?
merge TableA as target
using (select Id, Description, UnitCost
from TableB)
as source (Id, Description, UnitCost)
on (target.Id = source.Id)
when MATCHED then
update set Id = source.Id,
Description = source.Description,
UnitCost = Source.UnitCost
when NOT MATCHED then
insert (Id, Description, UnitCost)
values (source.Id, source.Description, source.UnitCost);
当我运行这个它告诉我多少行受到影响。如果我运行它,并且我知道源和目标完全相同,我仍然会收到一条消息,告诉我x行受到了影响。在我的情况下,大约200行。 SQL Server是否将相同的数据重新写入磁盘?
200行不算什么,可以很容易地重写,不影响SQL Server的性能。但是,如果我有一个包含500,000多行和大量索引的合并语句,那么重新更新表中的所有数据将会变得非常昂贵。
我是否需要检查数据是否先改变(至少在性能可能成为问题的情况下)?
如果是这样,我该怎么做一个合并的声明(也许使用我的例子上面)?
您可能会发现[本文相关(http://sqlblog.com/blogs/paul_white/archive/2010/08/11/the_2D00_impact_2D00_of_2D00_update_2D00_statements_2D00_that_2D00_don_2D00_t_2D00_change_2D00_data.aspx) –