لقد واجهت للتو مشكلة الأداء التالية لقاعدة بيانات 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 ثانية.