سؤال

لو عندي استفسار مثل

DELETE FROM table WHERE datetime_field < '2008-01-01 00:00:00'

لا وجود datetime_field مساعدة العمود المفهرسة؟أي.هل المؤشر مفيد فقط عند استخدام اختبار المساواة (أو عدم المساواة)، أم أنه مفيد عند إجراء مقارنة مرتبة أيضًا؟

(اقتراحات لتنفيذ هذا الاستعلام بشكل أفضل، دون إعادة إنشاء الجدول، ستكون مناسبة أيضًا!)

هل كانت مفيدة؟

المحلول

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

استخدم EXPLAIN (في SELECT؛لا يمكنك شرح الحذف) لتحديد قرارها في حالة معينة.ومن المرجح أن يعتمد عليه

  • كم عدد الصفوف الموجودة في الجدول
  • ما هو النطاق الذي تحدده
  • ماذا تم تحديده أيضًا في جملة WHERE.لن يستخدم فحص النطاق لفهرس واحد إذا كان هناك فهرس آخر "يبدو أفضل".

نصائح أخرى

من الدليل المرجعي لـ MySQL:

يمكن استخدام فهرس B-tree لمقارنات الأعمدة في التعبيرات التي تستخدم عوامل التشغيل =، >، >=، <، <=، أو BETWEEN.

بالنسبة لعدد كبير من الصفوف، يمكن أن يكون البحث عن الصفوف من خلال فهرس شجرة أسرع بكثير من البحث عن طريق فحص الجدول.ولكن كما تشير الإجابات الأخرى، استخدم EXPLAIN لمعرفة قرار MySQL.

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

إنه كذلك، تحقق من جدول DESCRIBE SELECT FROM ...

إلا أنه ليس لديك هذا الخطأ في الخلية http://bugs.mysql.com/bug.php?id=58190

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top