SQL: أداء ضعيف بالرغم من الفهرس

لقد واجهت للتو مشكلة الأداء التالية لقاعدة بيانات SQL: في جدول SQL يسمى "المستخدمين" مع ما يقرب من 1000000 إدخال ، استغرق تحديد عدد التسجيلات اليوم 28 ثانية غير مقبولة. تم حفظ أوقات التسجيلات بتنسيق "Ymd H: i: s" في عمود "الإنشاء".


الاستعلام المستخدم

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

أدى إلى وقت التحميل هذا ، على الرغم من وجود فهرس بالفعل في عمود "الإنشاء" بتنسيق DATETIME

ALTER TABLE `users` ADD INDEX `created` (`created`);

تم تعيينه. سبب ضعف الأداء هو استدعاء دالة التاريخ: العمود المفهرس "تم إنشاؤه" يتم إرساله بواسطة الدالة DATE ويجعل الفهرس غير فعال. لا يعرف "مُحسِّن الاستعلام" إلا "تم إنشاؤه" ، ولكن ليس نتيجة التاريخ (تم الإنشاء). الاستعلام الأمثل

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

يؤدي إلى النتيجة المرجوة في زمن قدره 0.4 ثانية.

عودة