2011-03-10 22 views
7

इस MySQL क्वेरीMySQL - की जटिलता: MyTable से COUNT (*) चुनें;

SELECT COUNT(*) FROM MyTable; 

की जटिलता एक मेज कहीं संग्रहीत और हर बार एक पंक्ति सम्मिलित या नष्ट कर दिया जाता है अद्यतन में प्रविष्टियों की संख्या की गणना है, क्या है? यदि ऐसा है, तो जटिलता ओ (1) होना चाहिए।

+0

ऐसा लगता है कि जब आप 'WHERE' कथन पर काम करते हैं तो यह 'ओ (एन)' होना होगा, इसलिए इसका मूल्यांकन सावधानी बरतें। – crush

उत्तर

8

यह स्टोरेज इंजन पर निर्भर करता है।

  • माईसाम के लिए कुल पंक्ति गणना प्रत्येक तालिका के लिए संग्रहीत की जाती है ताकि SELECT COUNT(*) FROM yourtable एक ऑपरेशन ओ (1) है। इसे सिर्फ इस मूल्य को पढ़ने की जरूरत है।
  • InnoDB के लिए कुल पंक्ति गणना संग्रहीत नहीं की जाती है इसलिए पूर्ण स्कैन की आवश्यकता होती है। यह एक ओ (एन) ऑपरेशन है।

manual से:

InnoDB एक तालिका में पंक्तियों की एक आंतरिक गिनती नहीं रखता है। (व्यावहारिक रूप से, यह बहु-संस्करण के कारण कुछ जटिल होगा।) SELECT COUNT(*) FROM t कथन को संसाधित करने के लिए, InnoDB को तालिका की अनुक्रमणिका को स्कैन करना होगा, जिसमें कुछ समय लगता है यदि अनुक्रमणिका पूरी तरह से बफर पूल में नहीं है। यदि आपकी तालिका अक्सर बदलती नहीं है, तो MySQL क्वेरी कैश का उपयोग करना एक अच्छा समाधान है। तेजी से गिनती पाने के लिए, आपको एक काउंटर टेबल का उपयोग करना होगा जो आप स्वयं बनाते हैं और अपने एप्लिकेशन को इसे आवेषण के अनुसार अपडेट करते हैं और इसे हटा देता है। SHOW TABLE STATUS का भी उपयोग किया जा सकता है यदि अनुमानित पंक्ति गणना पर्याप्त है। खंड 13.2.13.1, "InnoDB Performance Tuning Tips" देखें।

+0

मेरे पास एक प्रश्न है। यदि जटिलता से, हमारा मतलब है कि डिस्क की संख्या पढ़ती है, तो क्या यह तालिका के सूचकांक को स्कैन करने के लिए अभी भी 'ओ (एन) 'होगा? क्या यह इंडेक्स प्रकार पर निर्भर नहीं है? –

1

माईसाम पंक्तियों में AFAIK पंक्तियों की गणना इनो डीबी में नहीं है, और हर गिनती के साथ-वह सभी पंक्तियों की गणना करता है।

-3

मुझे यकीन नहीं है कि वह मान संग्रहीत है या नहीं, लेकिन यह आपकी क्वेरी के लिए बिल्कुल महत्वपूर्ण नहीं है। आपकी क्वेरी के साथ MySQL का उपयोग करके यह आपके द्वारा निष्पादित किए जाने पर सभी लौटाई गई पंक्तियों की गणना करेगा।

+2

महत्वपूर्ण या नहीं, यह उसका निर्णय है, है ना? यह मेरे लिए एक बिल्कुल वैध सवाल प्रतीत होता है। –

+0

कार्यों की जटिलता को जानना बहुत महत्वपूर्ण है, विशेष रूप से लंबे प्रश्नों से बचने के लिए जब आपके पास बड़ी मात्रा में डेटा होता है तो अधिक बुद्धिमान होते हैं। –

संबंधित मुद्दे