-
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.
-
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ů.
-
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.
-
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).