"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تسريع استعلام \"SELECT COUNT(*)...\" البطيء باستخدام عبارة WHERE في MySQL؟

كيف يمكنني تسريع استعلام \"SELECT COUNT(*)...\" البطيء باستخدام عبارة WHERE في MySQL؟

تم النشر بتاريخ 2024-11-12
تصفح:379

How Can I Speed Up a Slow \

تحسين "SELECT COUNT(*)..." مع شرط المكان

تتعلق المشكلة المطروحة بـ "SELECT COUNT" البطيء بشكل ملحوظ (*)" في MySQL، حتى عند تطبيق عبارة "WHERE". ولمواجهة هذا التحدي، من المهم فهم آلية تخزين MySQL.

المفاتيح الأساسية المجمعة

InnoDB، محرك التخزين المستخدم في هذه الحالة، يستخدم المفاتيح الأساسية المجمعة. وهذا يعني أنه يتم تخزين المفتاح الأساسي بجانب صف البيانات في نفس صفحات البيانات، وليس في صفحات فهرس منفصلة. وبالتالي، فإن إجراء فحص النطاق على مفتاح أساسي متفاوت يتطلب المسح عبر جميع الصفوف، بما في ذلك قيم الأعمدة الواسعة المحتملة. يحتوي الجدول المعني على عمود نص، مما يؤدي إلى تفاقم مشكلة الأداء.

استراتيجيات التحسين

لتحسين هذا الاستعلام، ضع في الاعتبار الاستراتيجيات التالية:

  1. تحسين الجدول: يؤدي تشغيل "OPTIMIZE TABLE" إلى ضمان فرز صفحات البيانات فعليًا بالترتيب. من المحتمل أن يؤدي هذا التحسين إلى تحسين أداء عمليات فحص النطاق على المفاتيح الأساسية المجمعة.
  2. إنشاء فهرس إضافي: فكر في إنشاء فهرس غير أساسي فقط في عمود "change_event_id". سيؤدي هذا إلى إنشاء نسخة من هذا العمود في صفحات الفهرس، وهو أسرع بكثير في المسح مقارنة بالمفتاح الأساسي المجمع. تحقق من خطة الشرح بعد إنشاء الفهرس لتأكيد استخدامه.

اقتراح إضافي

لمزيد من تحسين الأداء، فكر في تعديل العمود "change_event_id" إلى يكون "كبيرًا غير موقع" إذا زاد من الصفر. يمكن أن يؤدي هذا التغيير إلى تقليل متطلبات التخزين وتحسين الأداء.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3