2008-09-29 11 views
44

MySQL, या तो निश्चित या गतिशील के रूप में एक मेज की पंक्ति प्रारूप को निर्दिष्ट स्तंभ डेटा प्रकार पर निर्भर करता है। यदि किसी तालिका में एक चर-लंबाई कॉलम डेटा प्रकार है, जैसे टेक्स्ट या VARCHAR, पंक्ति प्रारूप गतिशील है; अन्यथा, यह तय है।MySQL पंक्ति प्रारूप: निश्चित और गतिशील के बीच अंतर?

मेरा सवाल है, दो पंक्ति प्रारूपों के बीच क्या अंतर है? क्या दूसरे की तुलना में एक और अधिक कुशल है?

उत्तर

54

अंतर वास्तव में केवल माईसाम के लिए महत्वपूर्ण है, अन्य स्टोरेज इंजनों को अंतर की परवाह नहीं है। संपादित करें: कई उपयोगकर्ताओं ने टिप्पणी की कि InnoDB परवाह है: link 1 by steampowered, link 2 by Kaan

  1. कोई पंक्ति विखंडन:

    निश्चित चौड़ाई पंक्तियों के साथ MyISAM के साथ, वहाँ कुछ फायदे हैं यह एकल पंक्तियों डेटा फ़ाइल में एक साथ कई वर्गों में विभाजित पाने के लिए परिवर्तनीय चौड़ाई पंक्तियों के साथ संभव है। इससे डिस्क बढ़ जाती है और संचालन धीमा हो जाता है। ऑप्टिमाइज़ टेबल के साथ इसे डिफ्रैग करना संभव है, लेकिन यह हमेशा व्यावहारिक नहीं होता है।

  2. डेटा फ़ाइल सूचक आकार: MyISAM में, डेटा फ़ाइल सूचक का एक अवधारणा है जिसका उपयोग डेटा फ़ाइल को संदर्भित करने के लिए किया जाता है। उदाहरण के लिए, इसका उपयोग इंडेक्स में किया जाता है जब वे संदर्भित करते हैं कि वास्तव में पंक्ति कहां मौजूद है। निश्चित चौड़ाई आकार के साथ, यह सूचक फ़ाइल में पंक्ति ऑफसेट पर आधारित होता है (यानी पंक्तियां 1, 2, 3 उनके आकार के बावजूद) होती हैं। परिवर्तनीय चौड़ाई के साथ, सूचक बाइट ऑफ़सेट पर आधारित होता है (यानी पंक्तियां 1, 57, 163 हो सकती हैं)। नतीजा यह है कि बड़ी टेबल के साथ, पॉइंटर को बड़ा होना चाहिए जो तब तालिका में संभावित रूप से बहुत अधिक ओवरहेड जोड़ता है।

  3. भ्रष्टाचार के मामले में ठीक करने के लिए आसान है। चूंकि प्रत्येक पंक्ति एक ही आकार है, यदि आपकी माईसैम तालिका दूषित हो जाती है तो इसे मरम्मत करना बहुत आसान होता है, इसलिए आप केवल उस डेटा को खो देंगे जो वास्तव में दूषित हो जाता है। परिवर्तनीय चौड़ाई के साथ, सिद्धांत में यह संभव है कि परिवर्तनीय चौड़ाई पॉइंटर्स गड़बड़ हो जाएं, जिसके परिणामस्वरूप डेटा खराब तरीके से हो सकता है।

अब निश्चित चौड़ाई के प्राथमिक दोष यह है कि यह अधिक स्थान बरबाद करती है।उदाहरण के लिए, आपको VARCHAR फ़ील्ड के बजाय CHAR फ़ील्ड का उपयोग करने की आवश्यकता है, ताकि आप अतिरिक्त स्थान ले सकें।

आम तौर पर, प्रारूप में आपको अधिक पसंद नहीं होगा, क्योंकि यह स्कीमा के आधार पर निर्धारित है। हालांकि, यदि आपके पास अनुकूलन करने का प्रयास करने के लिए केवल कुछ वर्चर्स या एक ब्लॉब/टेक्स्ट है तो यह लायक हो सकता है। उदाहरण के लिए, एकमात्र वर्चर को चार में स्विच करने पर विचार करें, या ब्लॉब को अपनी तालिका में विभाजित करें।

तुम भी इस बारे में और अधिक पढ़ सकते हैं:

http://dev.mysql.com/doc/refman/5.0/en/static-format.html

http://dev.mysql.com/doc/refman/5.0/en/dynamic-format.html

+9

[यह पृष्ठ] (http://dev.mysql.com/doc/innodb/1.1/en/innodb-row-format-dynamic.html) इंगित करता है कि गतिशील पंक्ति प्रारूप में InnoDB के लिए भी महत्व है। – steampowered

+4

गतिशील पंक्ति प्रारूप को इंगित करने वाला एक अन्य लेख इनो डीबी के लिए महत्व है: [इनो डीबी में ब्लॉब स्टोरेज - माईएसक्यूएल प्रदर्शन ब्लॉग] (http://www.mysqlperformanceblog.com/2010/02/09/blob-storage-in-innodb/) – Kaan

+1

I 'ROW_SIZE = 282B' वाली तालिका में 10 हजार रिकॉर्ड्स सम्मिलित करने का परीक्षण किया। इनो डीबी के साथ, इसमें लगभग 500 सेकंड लग गए; माईसाम और मेमोरी के साथ, इसमें लगभग 2.97 सेकंड लग गए। – Victor

4

फिक्स्ड अर्थ यह है कि प्रत्येक पंक्ति बिल्कुल वैसा ही आकार है। इसका मतलब है कि अगर एक डेटा पृष्ठ पर 3 पंक्ति लोड करने की आवश्यकता है, यह वास्तव में PageHeader + 2 * ROWSIZE पर किया जाएगा, कुछ का उपयोग समय की बचत।

गतिशील रिकॉर्ड की शुरुआत को खोजने के लिए, रिकॉर्ड ऑफ़सेट की सूची से परामर्श लेना चाहिए, जिसमें अतिरिक्त संकेत शामिल है।

संक्षेप में, हाँ, गतिशील पंक्तियों के लिए थोड़ा सा प्रदर्शन मारा गया है। नहीं, यह बहुत बड़ा नहीं है। यदि आपको लगता है कि यह एक समस्या होगी, इसके लिए परीक्षण करें।

+2

बीच पैरा सच है? ऐसा लगता है कि स्वीकृत उत्तर का खंडन होता है। (यानी: सूचक आकार केवल बड़ा है, संकेत का एक अतिरिक्त स्तर नहीं) –

10

एक मुख्य अंतर यह तब होता है जब आप एक रिकॉर्ड अद्यतन करें। यदि पंक्ति प्रारूप तय किया गया है, तो रिकॉर्ड की लंबाई में कोई बदलाव नहीं है। इसके विपरीत, यदि पंक्ति प्रारूप गतिशील है और नए डेटा रिकॉर्ड लंबाई में वृद्धि करने के लिए कारण बनता है, एक लिंक "अतिप्रवाह" डेटा को इंगित करने (यानी यह अतिप्रवाह सूचक कहा जाता है) का इस्तेमाल किया जाता है।

इस तालिका में टुकड़े और आम तौर पर धीमा बातें। डिफ्रैगमेंट (ऑप्टिमाइज़ टेबल) के लिए एक कमांड है, जो कुछ हद तक इस मुद्दे को कम करता है।

1

फिक्स्ड चार-लंबाई होने की कमी के साथ गतिशील गति से तेज़ और अधिक सुरक्षित होना चाहिए। आप यहां यह जानकारी पा सकते हैं: http://dev.mysql.com/doc/refman/5.0/en/static-format.html

7

MySQL के दस्तावेज में इस पृष्ठ यहाँ शीर्ष जवाब खंडन करने के लिए, कि गतिशील पंक्ति प्रारूप में लगता है InnoDB तालिकाओं के लिए कुछ का मतलब है साथ ही:

http://dev.mysql.com/doc/innodb/1.1/en/innodb-row-format-dynamic.html

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