sql >> Base de Datos >  >> RDS >> Sqlserver

ACTUALIZAR o COMBINAR tablas muy grandes en SQL Server

En realidad, encontré recomendaciones generales para este tipo de consultas:la idea de usar SQL Merge o Update es muy inteligente, pero falla cuando necesitamos actualizar muchos registros (es decir, 75M ) en una mesa grande y ancha (es decir, 240M ).

Mirando el plan de consulta de la consulta a continuación, podemos decir que TABLE SCAN de TABLE1 y MERGE final están tomando el 90% del tiempo.

MERGE TABLE1 as Target  
USING UTABLE as source  
ON Target.record_id = source.record_id   
WHEN MATCHED AND (condition) THEN   
    UPDATE SET Target.columns=source.columns

Entonces, para usar MERGE, necesitamos:

  1. Reduzca la cantidad de filas que necesitamos actualizar y pase correctamente esta información a SQL Server. Esto se puede hacer haciendo UTABLE más pequeño o especificando condition adicional que estrecha la parte que se fusionará.
  2. Asegúrese de que la parte que se fusionará quepa en la memoria; de lo contrario, la consulta se ejecutará mucho más lentamente. Haciendo TABLE1 dos veces menos reduje mi tiempo de consulta real de 11 horas a 40 minutos.

Como Mark mencionó, puedes usar UPDATE sintaxis y use WHERE cláusula para estrechar la parte que se fusionará:esto dará los mismos resultados. Además, evite indexar TABLE1 ya que esto causará trabajo adicional para reconstruir el índice durante MERGE