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

Jak odstranit velká data tabulky v SQL bez protokolu?

  1. Pokud odstraňujete všechny řádky v této tabulce, nejjednodušší možností je zkrátit tabulku, něco jako

     TRUNCATE TABLE LargeTable
     GO
    

Zkrátit tabulku jednoduše vyprázdní tabulku, nemůžete použít klauzuli WHERE k omezení mazaných řádků a nebudou spouštěny žádné spouštěče.

  1. Na druhou stranu, pokud odstraňujete více než 80–90 procent dat, řekněme, že máte celkem 11 milionů řádků a chcete smazat 10 milionů, jiným způsobem by bylo vložit těchto 1 milion řádků (záznamy, které chcete zachovat ) na jiný pracovní stůl. Zkraťte tuto velkou tabulku a vložte zpět těchto 1 milion řádků.

  2. Nebo pokud oprávnění/zobrazení nebo jiné objekty, které mají tuto velkou tabulku jako svou podkladovou tabulku, nejsou ovlivněny zrušením této tabulky, můžete tyto relativně malé množství řádků přesunout do jiné tabulky, tuto tabulku zrušit a vytvořit jinou tabulku se stejnou schéma a importujte tyto řádky zpět do této ex-Large tabulky.

  3. Poslední možností, která mě napadá, je změnit Recovery Mode to SIMPLE a poté odstraňte řádky v menších dávkách pomocí smyčky while, která je podobná tomuto:

     DECLARE @Deleted_Rows INT;
     SET @Deleted_Rows = 1;
    
    
     WHILE (@Deleted_Rows > 0)
       BEGIN
        -- Delete some small number of rows at a time
          DELETE TOP (10000)  LargeTable 
          WHERE readTime < dateadd(MONTH,-7,GETDATE())
    
       SET @Deleted_Rows = @@ROWCOUNT;
     END
    

a nezapomeňte změnit režim obnovy zpět na plný a myslím, že si musíte udělat zálohu, aby byla plně účinná (režimy změny nebo obnovy).



  1. Úvod do dočasných tabulek na serveru SQL Server

  2. Vybrat dotaz mysql mezi datem?

  3. Role DBA v NoSQL

  4. Pivoting dat pomocí dvou sloupců