Skip to content
English

اقتراح إنشاء Indexes لجداول التفاصيل الكبيرة

يوفر هذا المقال إرشادات لتحديد جداول التفاصيل الكبيرة في قاعدة البيانات التي تفتقر إلى indexes أساسية على أعمدة المفاتيح الخارجية (foreign key)، مما قد يؤدي إلى مشكلات في الأداء عند استرجاع السجلات.

لماذا يهمنا هذا الأمر

في Nama ERP والأنظمة الأخرى ذات المخططات عالية التطبيع، تحتوي كثير من الجداول على سطور تفاصيل (سجلات فرعية) مرتبطة بالجداول الرئيسية عبر عمود مفتاح خارجي (مثل qtyTrans_id وstockAgesTrans_id). إذا لم تكن هذه الأعمدة مُفهرَسة، فإن الاستعلامات التي تتضمن سطور التفاصيل—ولا سيما عند توليد التقارير أو تحميل المستندات—ستكون أبطأ بشكل ملحوظ.

لتحسين الأداء، يُنصح بإنشاء non-clustered index على أعمدة المفاتيح الخارجية هذه فقط إذا كان جدول التفاصيل يحتوي على عدد كبير من الصفوف.

كيفية استخدام هذا الاستعلام

يبحث استعلام SQL التالي عن الجداول في قاعدة البيانات التي:

  • تحتوي على أعداد كبيرة من السجلات
  • تملك عمود مفتاح خارجي معروفاً للجدول الأب
  • لا تمتلك بالفعل index على عمود المفتاح الخارجي

يُخرج الاستعلام قائمة بالجداول مع مقترحات لإنشاء الـ index المطلوب.

يجب تطبيق الـ indexes المقترحة فقط على الجداول التي يتجاوز فيها row_count الحد المحدد، مثل 50,000 أو 100,000 سجل.

table_namecolumn_namerow_countcreate_index_sql
StockAgesTransLinestockAgesTrans_id37537276CREATE NONCLUSTERED INDEX IX_StockAgesTransLine_stockAgesTrans_id ON dbo.StockAgesTransLine(stockAgesTrans_id);
QtyTransLineqtyTrans_id31629670CREATE NONCLUSTERED INDEX IX_QtyTransLine_qtyTrans_id ON dbo.QtyTransLine(qtyTrans_id);
CostOutTransLinecostOutTrans_id26216977CREATE NONCLUSTERED INDEX IX_CostOutTransLine_costOutTrans_id ON dbo.CostOutTransLine(costOutTrans_id);
StockTakingDetailsElecLinestockTakingDetails_id2365CREATE NONCLUSTERED INDEX IX_StockTakingDetailsElecLine_stockTakingDetails_id ON dbo.StockTakingDetailsElecLine(stockTakingDetails_id);

من هذه النتيجة:

  • يجب إنشاء الـ index لجدول StockAgesTransLine لأنه يحتوي على 37 مليون صف.
  • لا يجب إنشاء الـ index لجدول StockTakingDetailsElecLine لأنه يحتوي على 2,365 صفاً فقط.

التوصيات

  • راجع نتيجة الاستعلام بصفة دورية، خاصةً بعد إضافة أنواع مستندات جديدة أو جداول تفاصيل جديدة.
  • لا تُنشئ indexes على الجداول الصغيرة (مثل أقل من 10,000 صف) ما لم تلاحظ مشكلات أداء فعلية.

استعلام SQL