Mise à JOUR ou de FUSION de très grandes tables dans SQL Server

J'ai besoin d'effectuer une mise à jour quotidienne d'un très large (300M dossiers) et de larges TABLE1. La source de données pour les mises à jour se trouve dans une autre table UTABLE qui est de 10% à 25% les lignes de TABLE1 mais est étroite. Les deux tables ont record_id comme clé primaire.

Actuellement, je suis en recréant TABLE1 à l'aide de l'approche suivante:

<!-- 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'

Cependant, cela prend près de 40 minutes sur mon serveur (60 GO de RAM pour SQL Server). Je veux atteindre 50% de gain de performance - ce que d'autres options puis-je essayer?

  1. MERGE et UPDATE - quelque chose comme le code ci-dessous fonctionne plus rapidement que pour un très petit UTABLE table pleine taille, tout se bloque:
    <!-- 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
  2. J'ai entendu que je peux effectuer un lot de FUSION en utilisant ROWCOUNT - mais je ne pense pas que cela peut être assez rapide pour 300 m à la ligne de la table.
  3. Toute requête SQL conseils qui peuvent vous être utiles?
Pouvez-vous poster le plan de requête?
Salut @chris, plan de requête est très simple: 1 Analyse de la Table TABLE1 2 Analyse de la Table UTABLE, 3 la JOINTURE de HACHAGE 4 FUSIONNER. Première et Dernière étape prennent 90% du temps. Cependant j'ai déjà compris comment répondre à ma question, se référer à ma propre réponse.

OriginalL'auteur Sergio Kozlov | 2011-05-14