कुछ चीज़ें... मेरे पास (a_id, job, State, start_time )
पर एक सिंगल कंपाउंड इंडेक्स होगा।यह सभी मानदंडों पर क्वेरी को अनुकूलित करने में मदद करने के लिए, जो मेरा मानना है कि सबसे अच्छा ट्यून किया गया अनुक्रम है। एक एकल "ए_आईडी", फिर दो नौकरियां, एक छोटी राज्य सीमा, फिर समय आधारित। इसके बाद, कोई उद्धरण नहीं देखें... ऐसा प्रतीत होता है कि आप संख्यात्मक को स्ट्रिंग तुलना में परिवर्तित कर रहे थे, उन्हें तुलना के लिए संख्यात्मक के रूप में छोड़ दें -- स्ट्रिंग से तेज़।
साथ ही, उन सभी को इंडेक्स के हिस्से के रूप में रखने से, यह एक कवरिंग इंडेक्स है जिसका अर्थ है कि इसे शामिल करने के लिए क्वालीफाइंग रिकॉर्ड्स का परीक्षण करने के लिए अन्य मान प्राप्त करने के लिए कच्चे पृष्ठ डेटा पर जाने की आवश्यकता नहीं है।
SELECT
count(*) AS tries
FROM
tasks
WHERE
a_id = 614
AND job IN ( 1, 3 )
AND state > 80 AND state < 100
AND start_time >= 1386538013;
अब, क्यों सूचकांक... निम्नलिखित परिदृश्य पर विचार करें। आपके पास दो कमरे हैं जिनमें बॉक्स हैं... पहले कमरे में, प्रत्येक बॉक्स एक "a_id" है, उसके भीतर कार्य क्रम में हैं, प्रत्येक कार्य के भीतर राज्य श्रेणियां हैं, और अंत में प्रारंभ समय तक।
दूसरे कमरे में, आपके बॉक्स प्रारंभ समय के अनुसार क्रमबद्ध होते हैं, उसमें a_id क्रमबद्ध होते हैं, और अंत में स्थिति होती है।
आपको जो चाहिए वह ढूंढना आसान होगा। इस तरह आपको इंडेक्स पर सोचना चाहिए। मैं इसके बजाय "ए_आईडी =614" के लिए एक बॉक्स में जाऊंगा, फिर नौकरी 1 पर जाउंगा और दूसरा नौकरी 3 के लिए। प्रत्येक नौकरी 1, नौकरी 3 के भीतर, 80-100 पकड़ो, फिर समय। हालांकि आप प्रत्येक मानदंड पर विचार करते हुए अपने डेटा और मात्रा को बेहतर ढंग से जानते हैं और समायोजित कर सकते हैं।
अंत में, गिनती (आईडी) बनाम गिनती (*)। मुझे केवल एक रिकॉर्ड योग्य की परवाह है। मुझे वास्तविक आईडी जानने की आवश्यकता नहीं है क्योंकि फ़िल्टरिंग मानदंड पहले से ही योग्य हैं या नहीं, वास्तविक "आईडी" के लिए (इस मामले में) क्यों देखें।