Мне нужно выполнить ежедневное обновление очень большого (300M записей) и широкого TABLE1
. Исходные данные для обновлений расположены в другой таблице UTABLE
, которая составляет 10% -25% строк TABLE1
, но является узкой. Обе таблицы имеют record_id
в качестве первичного ключа.
В настоящее время я воссоздаю TABLE1
, используя следующий подход:
<!-- 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 ГБ оперативной памяти для SQL Server). Я хочу добиться 50% производительности - какие еще варианты я могу попробовать?
-
MERGE
иUPDATE
- что-то вроде кода ниже работает быстрее только для очень маленькой таблицыUTABLE
- в полном размере, все просто зависает:<!-- language: SQL --> MERGE TABLE1 as target USING UTABLE as source ON target.record_id = source.record_id WHEN MATCHED THEN UPDATE SET Target.columns=source.columns
-
Я слышал, что я могу выполнять пакетный MERGE с помощью ROWCOUNT, но я не думаю, что он может быть достаточно быстрым для таблицы строк 300M.
-
Любые подсказки SQL-запросов, которые могут быть полезны?