sql >> Databáze >  >> RDS >> Sqlserver

AKTUALIZACE nebo SLOUČENÍ velmi velkých tabulek na serveru SQL Server

Vlastně jsem našel obecná doporučení pro takové dotazy:Nápad použít SQL Merge nebo Update je velmi chytrý, ale selže, když potřebujeme aktualizovat mnoho záznamů (tj. 75M ) na velkém a širokém stole (tj. 240 milionů ).

Při pohledu na plán dotazu níže uvedeného dotazu můžeme říci, že TABLE SCAN z TABLE1 a poslední MERGE zabírají 90 % času.

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

Abychom tedy mohli použít MERGE, potřebujeme:

  1. Snižte počet řádků, které potřebujeme k aktualizaci, a správně předejte tyto informace serveru SQL Server. To lze provést nastavením UTABLE menší nebo specifikující další condition která zužuje část, která má být sloučena.
  2. Ujistěte se, že se část, která má být sloučena, vejde do paměti, jinak bude dotaz probíhat mnohem pomaleji. Vytváří se TABLE1 dvakrát méně zkrátilo můj skutečný čas dotazu z 11 hodin na 40 minut.

Jak Mark zmínil, můžete použít UPDATE syntaxi a použijte WHERE klauzule na zúžení části, která má být sloučena - to poskytne stejné výsledky. Vyhněte se také indexování TABLE1 protože to způsobí další práci na přestavbě indexu během MERGE



  1. Jak rozdělit tabulku MySQL podle dne?

  2. Komentáře SQL k vytvoření tabulky na serveru SQL Server 2008

  3. Co je nového v PgBouncer 1.6

  4. Překročena maximální doba provádění 30 sekund