एसक्यूएल: इंडेक्स के बावजूद खराब प्रदर्शन

मैं सिर्फ एक SQL डेटाबेस की निम्न प्रदर्शन समस्या से सामना कर रहा था: ~ 1,000,000 प्रविष्टियों के साथ "उपयोगकर्ता" नामक एक SQL तालिका में, पंजीकरण की संख्या निर्धारित करने के लिए आज अस्वीकार्य 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 का फ़ंक्शन कॉल है: अनुक्रमित कॉलम "बनाया" फ़ंक्शन DATE द्वारा भेजा जाता है और सूचकांक को अप्रभावी बनाता है। क्वेरी ऑप्टिमाइज़र केवल "बनाया" जानता है, लेकिन DATE (निर्मित) का परिणाम नहीं है। अनुकूलित क्वेरी

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

0.4 सेकंड के समय में वांछित परिणाम की ओर जाता है।

वापस