حل من حلول لتسريع عمل count او حصر السجلات فى قاعدة بيانات Mysql ضخمة

  • true

السلام عليكم

يوجد لدى قاعدة بيانات بها اكثر من 5 مليون سجل

توجد لدى مشكلة بطىء عند حصر لعدد السجلات لأستخدام الرقم فى عمل تعدد صفحات Pagination

مثال:

Select count(*) from ...

هل من حلاول يمكن عملها او استخدام دوال اخرى فى mysql غير count() نتائجها اسرع فى التعامل مع قواعد البيانات الضخمة

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

اعمل ترايجر يقوم بزيادة العدد كلما تمت اضافة وانقاصه عند الحذف وحفظ هذا العدد في جدول مساعد

وعند الحاجة للعدد اقرأ هذه القيمة

الطريقة سوف تكون غير فعالة لان جملة الاستعلام تختلف حسب نوع البحث

ظننتك تسأل عن العدد الكلي بعد كل إدراج أو حذف، وأنت تريده بشروط إذا لن تصلح هذه الطريقة.

لكن حاول تحسين ترتيب شروط البحث بحيث يكون الأسبق لمن تتوقع أنه سيرجع العدد الأقل

ولا أدري إن كان هناك عملية تحسين وإعادة ترتيب للشروط تلقائيا.

بالنسبه لي أعمل كاش لأي جمله سيكول وهذا الكاش يكون بعدد ثواني معين على حسب الحاجه ويتم تخزينه في ملف تكست يتم إستدعاؤه عند الإستعلام عن نفس الجمله

النظام موجود في بيئة العمل صفحتي يمكنك الإستفاده منه

في ملف داخل هذا المسار

framework/classes/mysql_cache.php

ahmadmarafa أضف ردا

جرب ان تقوم بعمل count لل id لان ال auto increment id عادة مايكون index

SELECT COUNT(id) AS count FROM ....

megasoft أضف ردا

المشكل في كمية البيانات الكبيرة وليست في العمود

الauto increment لن يعكس الرقم الحقيقى اذا قمت بمسح سجل, لأنك اذا مسحت السجل رقم 3 من 5 السجل الجديد سوف يكون id 6 و لكن عددهم هو 5!

COUNT يستخدم للعد , كل ما اقصدة , ان ال auto_increment يؤدي إلى إنشاء index يحتوي على قيم ال id فيسهل الوصول ليها هذا كل ماقصدتة :)

ليس من المفترض ان تأخذ تعليمة count وقتا طويلا مهما كان عدد السجلات, الا فى حالة انك تدخلها فى جملة شرطية.

اذا كنت تستخدم استعلام شرطى فتأكد من التالى :

  • استخدم indexing للcolumns التى تدخل فى الاستعلامات.

  • حاول ان تستعلم بcolumn رقمى, و ليس text او تاريخ, لأن الاستعلام بالcolumns الرقمية(int, float) أسرع كثيرا. اذا كان لديك تاريخ مثلا يمكنك تحويله الى رقم epoch بسهولة و الاداء يكون أفضل.