sql >> Database teknologi >  >> RDS >> Sqlserver

OPDATERING eller FLETNING af meget store tabeller i SQL Server

Faktisk har jeg fundet ud af generelle anbefalinger til sådan en forespørgsel:Idéen til at bruge SQL Merge eller Update er en meget smart idé, men den mislykkes, når vi skal opdatere mange poster (dvs. 75M ) i et stort og bredt bord (dvs. 240M ).

Når vi ser på forespørgselsplanen for forespørgslen nedenfor, kan vi sige, at TABLE SCAN af TABEL1 og endelig MERGE tager 90 % af tiden.

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

Så for at bruge MERGE skal vi:

  1. Reducer antallet af rækker, vi skal opdatere, og videregive disse oplysninger korrekt til SQL Server. Dette kan gøres ved at lave UTABLE mindre eller angive yderligere condition der indsnævrer den del, der skal fusioneres.
  2. Sørg for, at den del, der skal flettes, passer i hukommelsen, ellers kører forespørgslen meget langsommere. Opretter TABLE1 to gange mindre reducerede min reelle forespørgselstid fra 11 timer til 40 minutter.

Som Mark nævnte kan du bruge UPDATE syntaks og brug WHERE klausul til snæver del, der skal slås sammen - dette vil give samme resultater. Undgå også at indeksere TABLE1 da dette vil medføre yderligere arbejde med at genopbygge indekset under MERGE



  1. Brug af en brugerdefineret JSON-koder til SQLAlchemys PostgreSQL JSONB-implementering

  2. Hvordan viser jeg en MySQL-fejl i PHP for en lang forespørgsel, der afhænger af brugerens input?

  3. Entity Data Model Wizard får undtagelse, når du forsøger at tilføje en ny Oracle-forbindelse

  4. Emulere/simulere SQL Azure lokalt?