ОБНОВЛЕНИЕ или ОБЪЕДИНЕНИЕ очень больших таблиц в SQL Server

Мне нужно выполнять ежедневное обновление очень большого (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?

  • 9
    задан YoYo 23 August 2016 в 01:02
    поделиться