Мне нужно выполнять ежедневное обновление очень большого (300M записей) и широкого ТАБЛИЦА 1
. Исходные данные для обновлений находятся в другой таблице UTABLE
, которая составляет 10% -25% строк TABLE1
, но является узкой. Обе таблицы имеют record_id
в качестве первичного ключа.
В настоящее время я воссоздаю ТАБЛИЦА1
, используя следующий подход:
<!-- language: sql -->
1) SELECT (required columns) INTO TMP_TABLE1
FROM TABLE1 T join UTABLE U on T.record_id=U.record_id
2) DROP TABLE TABLE1
3) sp_rename 'TMP_TABLE1', 'TABLE1'
Однако это занимает около 40 минут на моем сервере (60 ГБ RAM для SQL Server). MERGE TABLE1 as target USING UTABLE as source ON target.record_id = source.record_id WHEN MATCHED THEN UPDATE SET Target.columns=source.columns
I heard that I can perform a batch MERGE by using ROWCOUNT - but I don't think it can be fast enough for a 300M row table.
Any SQL query hints that can be helpful?