it-swarm.asia

طريقة غير مؤلمة لإنشاء فهرس مجمع على طاولة ضخمة؟

لذلك لدينا موقع عميل يشكو من بعض الأداء البطيء بشكل خطير. لقد ألقيت نظرة واحدة ومن الواضح أن المشكلة هي لأن شخص آخر (grrrr) صمم جدولًا يحتوي على حوالي 20 مليون سجل زائد بدون فهرس مجمع.

الآن أريد إنشاء فهرس مجمع على هذا الجدول - ولكن في بيئة الاختبار الخاصة بي create index تم تشغيل الأمر لمدة ساعة وما زال لم يتم. موقع العميل عبارة عن أرضية متجر تعمل على مدار الساعة طوال أيام الأسبوع ، ولا يمكنها تحمل ساعة من التوقف أثناء إنشاء فهرس.

هل هناك طريقة أقل قوة غاشمة لإنشاء الفهرس الذي سينهي المهمة بسرعة ، أو يقوم بها بطريقة ذكية لن تقتل أداء الخادم تمامًا أثناء انشغاله؟

نحن نستخدم SQL Server Enterprise Edition.

22
Shaul Behr
  • إذا كان خادم SQL الخاص بك هو إصدار Enterprise + والجدول لا يحتوي على أي حقول BLOB - CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • إذا لم يكن الأمر كذلك - فلا توجد طريقة باستثناء إنشاء الجدول بنفس المخطط على الجانب ونقل البيانات إليه بحكمة ، بما في ذلك جميع عمليات INSERT/UPDATE/DELETE (باستخدام الزناد ، على سبيل المثال) ، ثم إسقاط الجدول القديم وإعادة تسميته بدقة جديد بنفس الاسم القديم - السلبيات: بطيئة ، تضيف حمولة إضافية إلى الخادم والتخزين

26
Oleg Dok

لست متأكدًا من إصدار خادم SQL الذي يستخدمه العميل. في المؤسسة ، يمكنك إنشاء الفهرس باستخدام (ONLINE = ON) ، بحيث يكون الجدول متاحًا حتى يتم إنشاء الفهرس.

12
Michal Barcik
  • إنشاء جدول جديد مطابق للجدول الأصلي (من الواضح أنه سيحتاج إلى اسم مختلف)
  • إنشاء فهرس مجمع على جدول جديد
  • تحميل البيانات في جدول جديد
  • إسقاط الجدول الأصلي
  • إعادة تسمية جدول جديد باستخدام الاسم الأصلي

تأكد من تطبيق أي أذونات مطلوبة من الأصل.

8
Bryan