Necesito realizar una actualización diaria de un gran (300M registros) y amplio TABLE1
. La fuente de datos para las actualizaciones se encuentra en otra tabla UTABLE
que es 10% -25% de las filas de TABLE1
pero es estrecha. Ambas tablas tienen record_id
como clave principal.ACTUALIZACIÓN o FUSIÓN de tablas muy grandes en SQL Server
Actualmente, estoy recreando TABLE1
utilizando el siguiente enfoque:
<!-- 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'
Sin embargo esto tiene casi 40 minutos en mi servidor (60 GB de RAM para SQL Server). Quiero lograr un 50% de ganancia de rendimiento. ¿Qué otras opciones puedo probar?
MERGE
yUPDATE
- algo así como el código de abajo funciona más rápido sólo para una pequeñaUTABLE
mesa - a tamaño completo, todo lo que acaba cuelga:<!-- 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
oí que puedo realizar un lote MERGE usando ROWCOUNT, pero no creo que pueda ser lo suficientemente rápido para una mesa de 300M.
¿Alguna sugerencia de consulta SQL que pueda ser útil?
¿Puede publicar el plan de consulta? –
Hola @chris, el plan de consulta es muy simple: ** 1 ** Escaneo de tabla TABLA1, ** 2 ** Escaneo de tabla UTABLE, ** 3 ** UNIÓN HASH, ** 4 ** FUSIÓN. El primer y último paso están tomando el 90% del tiempo. Sin embargo, ya he entendido cómo abordar mi pregunta, por favor vea mi propia respuesta. –