الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل من طريقة لتسريع كويرى

بدأه محمد ابو الدهب في 14 مارس 2009 · 2 رد · 527 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوه الاعزاء

السلام عليكم ورحمة الله

لدى جدولين جدول اساسى وجدول به التفصيلي الجدول الاساسى يحتوى على 4 الاف سجل التفصيلى يحتوى على 70الف سجل انا ياستخدم م كويرى لتحديث الرصيد في احد حقول الاساسي من احد الحقول فى التفصيلى المشكله هو ان هذ تنفيذ الكويري ياخذ حوالى 12 دقيقه مع العلم بان لاجهاز حديث والذاكره كبيره ( الجدولين باردكوكس )

واليكم الكود المستخدم

update master table d set field1 = select sum (field2) from datil table where (field3 =d.field4)

ولكم الشكر

#2

السلام عليكم...

جملة التحديث لا غبار عليها. المشكلة تنشأ من أن كل عملية تحديث (لكل سجل) في الجدول الرئيسي تتسبب في تنفيذ الـ query الموجود على يمين علامة الـ (=) أي جملة SELECT SUM... و هذا يعني أن هذه الجملة يتم تنفيذها حسب عدد السجلات في الجدول الرئيسي (4 آلاف مرة في مثالك).

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

مثلاً يمكن تغيير جملة التحديث كالتالي:

UPDATE mastertable d SET field1 = (SELECT SUM(field2) FROM datiltable WHERE (field3 = d.field4)) WHERE (d.idfield IN (a, b, c, d, e, f))

حيث عبارة WHERE الثانية تتبع جملة UPDATE، و idfield هو حقل المفتاح الأساسي في الجدول الرئيسي، و القيم a, b, c, d, e, f هي أرقام السجلات (حسب الحقل idfield) التي تحتاج إلى تحديث في الجدول الرئيسي (و التي تم تغيير في السجلات الفرعية التابعة لها).

بالتأكيد ستحتاج إلى بعض الكود الإضافي لمعرفة أو متابعة السجلات الفرعية التي تم إجراء تغييرات عليها للحصول على أرقام السجلات الرئيسية الواجب تحديثها، لكن هذا الجهد الإضافي سيحسن من أداء البرنامج (12 دقيقة أعتقد مدة طويلة نسبياً).

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#3

السلام عيكم اخى العزيز

شكرا على سرعة الرد

ولكن المشكله اننى اريد اعادة احتساب الارصدة قبل بداية تدوير العام وجعل ارصدة الحركه ( الموجوده فى الملف التفصيلي ) ارصده افتتاحيه للعام الجديد ولذلك من الضرورى كاجراء رقابى اعادة احتساب الارصده من جدولها التفصيل لذلك لا استطيع اخذ السجلات التى حدث علها تغير فقط

وشكرا

مواضيع مشابهة