delphi4arab منتديات دلفي للعرب
بطء شديد في جملة UPDATE - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : بطء شديد في جملة UPDATE (/showthread.php?tid=11006)

الصفحات: 1 2


بطء شديد في جملة UPDATE - samnaj00 - 15-08-2020

السلام عليكم ورحمة الله وبركاته
السادة الكرام
لدي جدول1 فيه اعمدة (رقم المادة-اسم المادة -رصيد المادة) ID_PROD-NAME_PROD-RASEED  (عدد المواد 100)
       جدول2 فيه اعمدة (رقم المادة-الكمية) ID_PROD-QTY (عدد السجلات 14000 سجل)

لكي احصل على رصيد كل مادة ووضعه في جدول1 . كتبت جملة ال update التالية:
كود :
update Table1 set raseed = (select sum(Table2.qty) from Table2 where Table1.id_prod = Table2.id_prod)

الكود يعمل بشكل جيد
لكن المشكلة في بطء النتيجة (10ثواني تقريباً) وهذا يعد عيباً كبيراً
كوني محاسباً واعمل على برنامج محاسبة بقاعدة بيانات برادوكس و1800 مادة و14000 سجل والامر لايستغرق كبسة الزر فقط

جربت قاعدة بيانات absolute  و bde و access والنتيجة واحدة

فهل من حل اخر للحصول على الرصيد والتقليل من الوقت


RE: بطء شديد في جملة UPDATE - samnaj00 - 17-08-2020

السلام عليكم

للاسف يعتري هاذا المنتدى شيء من الخمول

 مع وجود مبرمجين محترفين وخبرات سنوات عديدة . لم أر رداً واحداً

- تابعت التجربة على قاعدة بيانات sql server وكانت النتيجة ممتازة . ألفان ومئتا مادة مع عشرين الف سجل للمواد .ظهرت النتيجة بكبسة زر

لكن ارجع واقول
كوني محاسباً واعمل على برنامج محاسبة بقاعدة بيانات برادوكس و1800 مادة و14000 سجل للمواد والامر لايستغرق كبسة الزر فقط

بانتظار الاحبة


RE: بطء شديد في جملة UPDATE - h-farid - 17-08-2020

و عليكم السلام و رحمة الله و بركاته
لما لا تستعمل حقل حسابي (CalculatedField) و تستغني عن تعليمة الـ Update. شيء مثل :

كود :
SELECT Table1.ProdID, Table1.ProdName, Sum(Table2.Quantity) AS TotalQuantity FROM Table1 INNER JOIN Table2 ON Table1.ProdID = Table2.ProdID GROUP BY Table1.ProdID, Table1.ProdName;



RE: بطء شديد في جملة UPDATE - samnaj00 - 17-08-2020

(17-08-2020, 10:50 AM)h-farid كتب : و عليكم السلام و رحمة الله و بركاته
لما لا تستعمل حقل حسابي (CalculatedField) و تستغني عن تعليمة الـ Update. شيء مثل :

كود :
SELECT Table1.ProdID, Table1.ProdName, Sum(Table2.Quantity) AS TotalQuantity FROM Table1 INNER JOIN Table2 ON Table1.ProdID = Table2.ProdID GROUP BY Table1.ProdID, Table1.ProdName;

استاذي الكريم جزاك الله خيراً

هذا ينفع في حال اردت اظهار البيانات والمجاميع فقط دون تعديل او اضافة
لكن الجدول الاول فيه (اضافة -تعديل ) مباشرة
هل يمكن تعديل جملة الاسكيول لكي يتم تطبيقها على عمود رصيد المادة؟


RE: بطء شديد في جملة UPDATE - محمد عبد العزيز - 17-08-2020


و عليكم السلام و رحمة الله و بركاته
أكتب الكود الكامل المستعمل وليس فقط جملة الإستعلام (إن أمكنك إرفاق مثال لكان أحسن) حتى يمكن توجيهك لمكان الخلل.



RE: بطء شديد في جملة UPDATE - samnaj00 - 17-08-2020

(17-08-2020, 12:54 PM)B.M.AbdelAziZ كتب :
و عليكم السلام و رحمة الله و بركاته
أكتب الكود الكامل المستعمل وليس فقط جملة الإستعلام (إن أمكنك إرفاق مثال لكان أحسن) حتى يمكن توجيهك لمكان الخلل.
لا يوجد سوى هذه الجملة فقط
كود :
update daleel_prod set raseed = (select sum(prod.qty_in) from prod where daleel_prod.id_prod = prod.id_prod)

لم تعمل جملة sql لقاعدة بيانات اكسس طلب عمل استعلام تحديث

في المرفقات نموذجين (bde - absolute ) مع exe - ضع المجلدين في القرص c


RE: بطء شديد في جملة UPDATE - sofiane201 - 17-08-2020

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

إطلعت على المشروع الذي استخدمت فيه Absolute DB, فوجدت بعض النقائص مثل:
  • لم تحدد Primary key في الجدول daleel_prod, المفتاح الرئيسي بشكل افتراضي يكون مع unique index "فهرس".
  • عدم استخدام الفهارس Indexes, الفهرس يساعد بشكل كبير في اختصار الوقت عند استخدام select, وفي هذه الحالة يسرع الاستعلام الذي وضعته داخل update.
  • عموما الجداول تبدو غير مركبة بشكل جيد, مثلا لا يوجد مفتاح خارجي في الجدول prod, ربما لأنك تستخدم absolute db؟ لانه لا يحتوي عليها وهو أمر غريب.


جربت نفس مثالك على قاعدة ب SQLite, والفارق كبير جدا في السرعة, لم يأخذ أكثر من ثانية ونصف عندي حتى بدون استخدام فهرس.

للعلم جربت المثالين خارج Rad studio, يعني واحدة داخل sqlite, والاخرى Absolute DB Manager حتى يتبين ان البطئ ليس من مكونات الاتصال.

الحل: غير قاعدة البيانات, حاول الالتزام بأساسيات SQL في انشاء الجداول.


RE: بطء شديد في جملة UPDATE - samnaj00 - 18-08-2020

استاذي الكريم سفيان
جزاك الله كل خير على المشاركة


(17-08-2020, 09:27 PM)sofiane201 كتب :
  • عموما الجداول تبدو غير مركبة بشكل جيد, مثلا لا يوجد مفتاح خارجي في الجدول prod, ربما لأنك تستخدم absolute db؟ لانه لا يحتوي عليها وهو أمر غريب.

ماهو المفتاح الخارجي ؟

(17-08-2020, 09:27 PM)sofiane201 كتب : جربت نفس مثالك على قاعدة ب SQLite, والفارق كبير جدا في السرعة, لم يأخذ أكثر من ثانية ونصف عندي حتى بدون استخدام فهرس.

ذكرت في مشاركاتي أني جربت على sql server وكانت النتيجة بكبسة زر فقط مع 2000 في daleel_prod و20000 سجل في prod
(17-08-2020, 09:27 PM)sofiane201 كتب : الحل: غير قاعدة البيانات, حاول الالتزام بأساسيات SQL في انشاء الجداول.
يمكن تغيير قاعدة البيانات
لكن الذي يدفعني للبحث عن حل بدلاً من تغيير القاعدة . هو مثال حي لدي وهو برنامج محاسبة اعمل عليه بقاعدة برادوكس دلفي7 وبأقل من ثانية يتم تحديث الرصيد

أكيد يوجد طريقة معينة لذلك . والله أعلم


RE: بطء شديد في جملة UPDATE - محمد عبد العزيز - 18-08-2020


جرب المرفق مع مثال Absolute
لاحظ الفرق بعد اضافة دليل Index للجدول الثاني



RE: بطء شديد في جملة UPDATE - samnaj00 - 18-08-2020

(18-08-2020, 01:35 PM)B.M.AbdelAziZ كتب : جرب المرفق مع مثال Absolute
لاحظ الفرق بعد اضافة دليل Index للجدول الثاني
جزاك الله خيراً  استاذي الكريم
انخفضت المدة الى الثلث تقريباً

قمت باضافة فهرس للجدول الاول لكنه لم يتغير شيئ
هل من طريقة ثانية لتقليل الزمن ؟؟