MySQL ने SQL_CALC_FOUND_ROWS
वर्जन 8.0.17 के साथ कार्यक्षमता को हटाना शुरू कर दिया है ।
इसलिए, हमेशा अपनी क्वेरी के साथ निष्पादित करने पर विचार करना पसंद किया जाता है LIMIT
, और फिर दूसरी पंक्तियों के साथ COUNT(*)
और बिना LIMIT
यह निर्धारित करने के लिए कि क्या अतिरिक्त पंक्तियाँ हैं।
से डॉक्स :
SQL_CALC_FOUND_ROWS क्वेरी संशोधक और FOUND_ROWS () फ़ंक्शन के साथ MySQL 8.0.17 के रूप में पदावनत किए गए हैं और भविष्य के MySQL संस्करण में हटा दिए जाएंगे।
COUNT (*) कुछ अनुकूलन के अधीन है। SQL_CALC_FOUND_ROWS के कारण कुछ अनुकूलन अक्षम हो जाते हैं।
इन प्रश्नों का उपयोग करें:
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;
इसके अलावा, SQL_CALC_FOUND_ROWS
आम तौर पर MySQL WL # 12615 में बताए गए मुद्दों को अधिक देखा गया है :
SQL_CALC_FOUND_ROWS में कई समस्याएं हैं। सबसे पहले, यह धीमा है। बार-बार, यह एलआईएमआईटी के साथ क्वेरी को चलाने के लिए सस्ता होगा और फिर एक ही क्वेरी के लिए एक अलग सेलेक्ट COUNT ( ) होगा, क्योंकि COUNT ( ) उन ऑप्टिमाइज़ेशन का उपयोग कर सकता है जो पूरे परिणाम सेट की खोज करते समय नहीं किए जा सकते हैं (जैसे फाइलर्स COUNT (*) के लिए छोड़ दिया जा सकता है, जबकि CALC_FOUND_ROWS के साथ, हमें सही परिणाम की गारंटी देने के लिए कुछ filesort ऑप्टिमाइज़ेशन को अक्षम करना होगा)
इससे भी महत्वपूर्ण बात, यह कई स्थितियों में बहुत अस्पष्ट शब्दार्थ है। विशेष रूप से, जब एक क्वेरी में कई क्वेरी ब्लॉक होते हैं (जैसे UNION के साथ), तो एक वैध क्वेरी का निर्माण करने के साथ-साथ एक ही समय में "होगा-होगा" पंक्तियों की संख्या की गणना करने का कोई तरीका नहीं है। जैसे-जैसे इटरेटर निष्पादक इस प्रकार के प्रश्नों की ओर बढ़ रहा है, वास्तव में उसी शब्दार्थ को बनाए रखने की कोशिश करना कठिन है। इसके अलावा, यदि क्वेरी में कई लिमिट्स हैं (जैसे व्युत्पन्न टेबल के लिए), तो यह जरूरी नहीं है कि उनमें से कौन सा SQL_CALC_FOUND_ROWS को संदर्भित करना चाहिए। इस प्रकार, इस तरह के निरर्थक प्रश्नों को आवश्यक रूप से पुनरावृत्त निष्पादक में अलग-अलग शब्दार्थ प्राप्त होंगे, जो पहले थे।
अंत में, अधिकांश उपयोग के मामले जहां SQL_CALC_FOUND_ROWS उपयोगी प्रतीत होता है, बस उसे LIMIT / OFFSET के अन्य तंत्रों द्वारा हल किया जाना चाहिए। उदाहरण के लिए, एक फोन बुक को पत्र द्वारा (यूएक्स के संदर्भ में और सूचकांक उपयोग के संदर्भ में) रिकॉर्ड संख्या से नहीं देखा जाना चाहिए। विचार-विमर्श तेजी से अनंत-तिथि (फिर से अनुक्रमणिका उपयोग की अनुमति) द्वारा आदेशित किया जाता है, पोस्ट नंबर द्वारा पृष्ठांकित द्वारा नहीं। और इसी तरह।
SQL_CALC_FOUND_ROWS
20 सेकंड से अधिक के साथ सिर्फ पहली 100 पंक्तियों का चयन करना ;COUNT(*)
5 सेकंड के लिए एक अलग क्वेरी का उपयोग करना (दोनों गणना + परिणाम प्रश्नों के लिए)।