जब आप COUNT(*)
इसे गणना कॉलम इंडेक्स में लेते हैं, तो यह सबसे अच्छा परिणाम होगा। MyISAM इंजन के साथ मैसकल वास्तव में पंक्ति गणना को संग्रहीत करता है, यह हर बार जब आप सभी पंक्तियों को गिनने की कोशिश करते हैं तो सभी पंक्तियों की गणना नहीं करते हैं। (प्राथमिक कुंजी के कॉलम पर आधारित)
पंक्तियों को गिनने के लिए PHP का उपयोग करना बहुत स्मार्ट नहीं है, क्योंकि आपको mysql से php पर डेटा भेजना है। जब आप mysql पक्ष पर समान हासिल कर सकते हैं तो ऐसा क्यों करें?
यदि COUNT(*)
धीमा है, तो आपको EXPLAIN
क्वेरी पर चलना चाहिए , और जांचें कि क्या इंडेक्स वास्तव में उपयोग किए जाते हैं, और उन्हें कहां जोड़ा जाना चाहिए।
निम्नलिखित सबसे तेज़ तरीका नहीं है, लेकिन एक मामला है, जहां COUNT(*)
वास्तव में फिट नहीं होता है - जब आप परिणामों को समूहित करना शुरू करते हैं, तो आप समस्या में भाग सकते हैं, जहां COUNT
वास्तव में सभी पंक्तियों की गिनती नहीं होती है।
उपाय है SQL_CALC_FOUND_ROWS
। यह आमतौर पर तब उपयोग किया जाता है जब आप पंक्तियों का चयन कर रहे होते हैं लेकिन फिर भी कुल पंक्ति गणना (उदाहरण के लिए, पेजिंग के लिए) जानना आवश्यक है। जब आप डेटा पंक्तियों का चयन करते हैं, तो केवल SQL_CALC_FOUND_ROWS
चयन के बाद कीवर्ड को जोड़ें :
SELECT SQL_CALC_FOUND_ROWS [needed fields or *] FROM table LIMIT 20 OFFSET 0;
आपके द्वारा आवश्यक पंक्तियों का चयन करने के बाद, आप इस एकल क्वेरी के साथ गणना प्राप्त कर सकते हैं:
SELECT FOUND_ROWS();
FOUND_ROWS()
क्वेरी का चयन करने वाले डेटा के तुरंत बाद कॉल करना होगा।
अंत में, सब कुछ वास्तव में नीचे आता है कि आपके पास कितनी प्रविष्टियां हैं और WHERE कथन में क्या है। आपको वास्तव में इस बात पर ध्यान देना चाहिए कि कैसे अनुक्रमित किया जा रहा है, जब बहुत सारी पंक्तियाँ (हजारों, लाखों, और ऊपर) हैं।
SELECT 1
और नहींSELECT *
। क्या कोई अंतर है?