سألني أحد الأصدقاء مؤخرًا، وقال إنه كان بطيئًا جدًا بالنسبة له في حذف ملايين إلى عشرات الملايين من البيانات في SQLSERVER، وقد ساعدته في تحليلها وقدمت بعض الاقتراحات على النحو التالي، وقد يكون ذلك مفيدًا للعديد من الأشخاص، وهو كذلك أيضًا، لم أكتب مدونة بعد، فلنناقشها معًا.
إذا كانت مساحة القرص الثابت لديك صغيرة، ولا تريد تعيين سجل قاعدة البيانات إلى الحد الأدنى (لأنك تريد الاحتفاظ بالسجلات العادية الأخرى). مسجلة) ولديك متطلبات سرعة عالية نسبيًا، ومسح جميع البيانات، أقترح عليك استخدام جدول Turncate 1، لأن الاقتطاع هو عملية DDL، ولا يؤدي إلى التراجع، ويكون أسرع إذا لم يكتب السجلات هي زيادة تلقائية، وستتم استعادتها إلى 1، وسيؤدي الحذف إلى التراجع. إذا قمت بحذف جدول يحتوي على كمية كبيرة من البيانات، فستكون السرعة بطيئة جدًا، وسوف تشغل الكثير من شرائح التراجع سجل سجلات المستوى G بالطبع، ماذا لو كانت هناك عمليات حذف مشروطة مثل الوقت <'2006-3-10'؟ هل يمكنني استخدام الحذف بدون تسجيل؟ الجواب هو لا، محرك SQL Server مصمم لتسجيل الحذف العمليات. لا توجد حتى الآن طريقة لفرض عدم تسجيل بيانات معينة في السجل في حالة تنفيذ حذف الجدول 1 حيث يتم تنفيذ الوقت < '2006-3-10'، فسيكون سجل السجل كبيرًا جدًا (3-4G) نظرًا لوجود الكثير. السجلات المعنية، إذا أمكن، أقترح الطريقة التالية:
حدد السجلات التي تريد الاحتفاظ بها في جدول جديد. إذا كنت تستخدم وضع الاسترداد الكامل
اعتمادًا على عدد سجلات SELECT INTO، قد يكون السجل أكبر.
حدد * في Table2 من Table1 حيث الوقت > = '2006-03-10'
ثم قم باقتطاع Table1 مباشرةً. لن يحدث أي تسجيل بغض النظر عن طراز الاسترداد
قم باقتطاع الجدول Table1
وأخيرًا أعد تسمية Table2 إلى Table1
EC sp_rename 'Table2'، 'Table1'
المصدر: المدونة: عمود الدومينو