فرض کنیم دستور حذف به صورت زیر است:
DELETE
FROM dbo.MyTable
WHERE [Date] < '1404/04/04'
و با توجه به حجم بالای داده ها باعث قفل شدن پایگاه داده میشود، در این صورت کد را به صورت زیر اصلاح کنید و بجای 100 بزرگترین عددی را قرار دهید که در کمتر از یک ثانیه کوئری اجرا گردد:
DELETE TOP (100)
FROM dbo.MyTable
WHERE [Date] < '1404/04/04'
حالا به صورت زیر یک حلقه بنویسید که تا پایان یافتن دادهها ادامه یابد (هر موقع کوئری را متوقف کنید نیز تا جایی که حلقه پیش رفته دادهها پاک شدهاند) :
WHILE 1 = 1
BEGIN
DELETE TOP (100)
FROM dbo.MyTable
WHERE [Date] < '1404/04/04'
IF @@ROWCOUNT = 0
BREAK;
WAITFOR DELAY '00:00:02'; -- وقفه 2 ثانیه
END
همچنین اگر روی شرطها ایندکس ندارید، ایجاد آن باعث میشود شرط WHERE سریعتر عمل کند، میتوانید آن را ایجاد و در صورتی که برای موارد دیگر به آن نیاز نیست در پایان کار آن را پاک کنید. به عنوان نمونه برای مثال بالا:
CREATE INDEX IX_MyTable_Date ON dbo.MyTable(Date);
دیدگاه ها:
ارسال دیدگاه
برچسب ها