-
Ако изтривате всички редове в тази таблица, най-простата опция е да съкратите таблицата, нещо като
TRUNCATE TABLE LargeTable GO
Съкращаването на таблицата просто ще изпразни таблицата, не можете да използвате клаузата WHERE, за да ограничите изтриваните редове и няма да бъдат задействани задействания.
-
От друга страна, ако изтривате повече от 80-90 процента от данните, кажете, ако имате общо 11 милиона реда и искате да изтриете 10 милиона, друг начин би бил да вмъкнете тези 1 милион реда (записи, които искате да запазите ) към друга етапна маса. Съкратете тази голяма таблица и вмъкнете обратно тези 1 милион реда.
-
Или ако разрешенията/изгледите или други обекти, които имат тази голяма таблица като основна таблица, не бъдат засегнати от изпускането на тази таблица, можете да прехвърлите тези относително малки количества от редовете в друга таблица, да пуснете тази таблица и да създадете друга таблица със същата схема и импортирайте тези редове обратно в тази бивша голяма таблица.
-
Една последна опция, за която се сещам, е да промените
Recovery Mode to SIMPLE
и след това изтрийте редове на по-малки партиди с помощта на while цикъл, нещо като това: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
и не забравяйте да промените режима на възстановяване обратно до пълен и мисля, че трябва да направите резервно копие, за да го направите напълно ефективен (промяната или режимите за възстановяване).