ترقيم الصفحات في MySQL: استرجاع النتائج والعدد الإجمالي بكفاءة
عند تنفيذ ترقيم الصفحات في MySQL، من الشائع إجراء استعلامين منفصلين: واحد إلى الحصول على العدد الإجمالي للنتائج وآخر للحد من السجلات التي تم جلبها. يمكن أن يكون هذا الأسلوب، المعروف باسم الاستعلام المزدوج، غير فعال بالنسبة لمجموعات البيانات الكبيرة.
ومع ذلك، فإن السؤال الذي يطرح نفسه هو ما إذا كان من الممكن استرداد إجمالي عدد النتائج والحد من النتائج في استعلام واحد. على الرغم من عدم وجود طريقة مباشرة لتحقيق ذلك، تتوفر طريقتان بديلتان:
SQL_CALC_FOUND_ROWS و FOUND_ROWS()
بدلاً من الاستعلام المزدوج، يمكنك استخدام SQL_CALC_FOUND_ROWS والدالات FOUND_ROWS() لتحقيق نتيجة مماثلة. الاستعلام الذي يحتوي على SQL_CALC_FOUND_ROWS يسبق الاستعلام المحدد، ويقوم استدعاء FOUND_ROWS() بجلب العدد الإجمالي.
مثال:
SELECT SQL_CALC_FOUND_ROWS * FROM `table` WHERE `some_condition`; SELECT FOUND_ROWS();
ملاحظة: هذه الطريقة لها عيب محتمل. يحتوي MySQL على خطأ يؤثر على استعلامات ORDER BY عند استخدام هذه التقنية، مما يجعلها أبطأ على الجداول الكبيرة.
تخزين العدد مؤقتًا
يتضمن الحل البديل تخزين العدد الإجمالي مؤقتًا لمدة محددة. يلغي هذا الأسلوب الحاجة إلى استعلام منفصل لجلب العدد مع الحفاظ على الكفاءة.
مثال:
استرجاع العدد وتخزينه مؤقتًا لمدة 10 دقائق:SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);
SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);في الاستعلامات اللاحقة، استخدم العدد المخزن مؤقتًا:SELECT * FROM `table` WHERE `some_condition` LIMIT 0, 10;
SET @count = (SELECT COUNT(*) FROM `table` WHERE `some_condition`);يؤدي التخزين المؤقت للعدد إلى تحسين الأداء بشكل ملحوظ، خاصة بالنسبة للصفحات التي تتم زيارتها بشكل متكرر. على الرغم من أنه ليس حلاً للاستعلام الفردي، إلا أنه يحقق نفس النتيجة مع كونه أكثر كفاءة من الاستعلام المزدوج.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3