जब आप COUNT(*)
यह गिनती कॉलम इंडेक्स में लेता है, इसलिए यह सबसे अच्छा परिणाम होगा। Mysql 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 कथन में क्या है। आपको वास्तव में इस बात पर ध्यान देना चाहिए कि अनुक्रमणिका का उपयोग कैसे किया जा रहा है, जब बहुत सारी पंक्तियाँ (दसियों हज़ार, लाखों, और अधिक) हों।