說我有一個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) –