Я думаю, что Гордон Линофф предложил отличный подход. Чтобы определить, возможно ли это, вам нужны мгновенные обновления или вы можете их пакетировать?
Если вы можете их пакетировать, подумайте, как часто обновления должны отражаться в основной таблице. Возможно, вам повезет, добавив все изменения в промежуточную таблицу, а затем запустив обновления позже. Это действительно зависит от производительности, которая вам нужна, и от того, что съедает вашу производительность сегодня. Если у вас есть несколько отдельных пользователей, которые все одновременно запускают обновления, и каждый пользователь должен иметь возможность мгновенно обновлять отдельные данные, то существуют различные подходы, которые следует учитывать. Однако, если вы можете обновлять эти значения очень редко, делайте их пакетно! Я получаю массу обновлений от компаний, которые продают моей компании, и это путь, по которому я должен был пойти для эффективности.
Вот как будет выглядеть эта партия, если вы сможете использовать промежуточный стол.
--Creates a staging table
create table dbo.StageUpdates
(
ID int primary key
, NewValue int
)
--Adds values to update to staging table
insert into dbo.StageUpdates
VALUES
(348923, 95)
,(348924, 90)
,(348925, 100)
--Update values
update dbo.MyTable
set Field1 = NewValue
from dbo.MyTable as mt
inner join dbo.StageUpdates as su on mt.ID = su.ID
where su.NewValue <> mt.Field1 --Modify this if either value can be null.
--Clear updated values from stage
delete from dbo.StageUpdates
from dbo.StageUpdates as su
inner join dbo.MyTable as mt on su.ID = mt.ID
where su.NewValue <> mt.Field1 --Modify this if either value can be null.