2010-09-29 15 views
77

InnoDB और MyISAMMySQL में क्या है?MySQL में InnoDB और MyISAM क्या है?

+6

"InnoDB। डिफ़ॉल्ट MySQL भंडारण इंजन है जब तक आप एक अलग डिफ़ॉल्ट संग्रहण इंजन कॉन्फ़िगर किया है, एक एक इंजन के बिना टेबल बयान बनाएँ जारी करने = खंड एक InnoDB तालिका बनाता है" है [MySQL: MyISAM बनाम इनो डीबी!] (Http://stackoverflow.com/questions/277440/mysql-myisam-vs-inno-db) का डुप्लिकेट, या आप अपना चयन ले सकते हैं: http://stackoverflow.com/खोज? q = myisam + बनाम + innodb –

+0

यह डेटाबेस इंजन है ... http://www.kavoir.com/2009/09/mysql-engines-innodb-vs-myisam-a-comparison-of-pros- और-cons.html – Matthieu

+0

क्या हम अपने डेटाबेस के लिए एक ही समय में दोनों स्टोरेज इंजन का उपयोग कर सकते हैं? – user130561

उत्तर

64

InnoDB और MYISAM, MySQL के लिए भंडारण इंजन हैं।

ये दो उनके लॉकिंग कार्यान्वयन पर भिन्न हैं: InnoDB तालिका में विशेष पंक्ति को ताला लगाता है, और MyISAM संपूर्ण MySQL तालिका को ताला लगा देता है।

डीबी में एक तालिका बनाते समय आप MYISAM या InnoDB देकर प्रकार निर्दिष्ट कर सकते हैं।

16

वे स्टोरेज इंजन हैं।

http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

MyISAM: डिफॉल्ट MySQL भंडारण इंजन और एक है कि वेब, डेटा भंडारण में सबसे अधिक उपयोग किया जाता है, और अन्य आवेदन वातावरण। MyISAM सभी MySQL कॉन्फ़िगरेशन में समर्थित है, और डिफ़ॉल्ट स्टोरेज इंजन है जब तक कि आपने डिफ़ॉल्ट रूप से किसी भिन्न का उपयोग करने के लिए MySQL को कॉन्फ़िगर नहीं किया है।

इनो डीबी: MySQL के लिए एक लेन-देन-सुरक्षित (एसीआईडी ​​अनुपालन) स्टोरेज इंजन जिसमें उपयोगकर्ता डेटा की सुरक्षा के लिए प्रतिबद्ध, रोलबैक और क्रैश-रिकवरी क्षमताएं हैं। इनो डीबी पंक्ति-स्तर लॉकिंग (कोसर ग्रैन्युलरिटी लॉक में वृद्धि के बिना) और ओरेकल-शैली लगातार नॉनलाकिंग पढ़ने से बहु-उपयोगकर्ता समवर्तीता और प्रदर्शन बढ़ता है। InnoDB क्लस्टर इंडेक्स में उपयोगकर्ता डेटा को प्राथमिक कुंजी के आधार पर सामान्य प्रश्नों के लिए I/O को कम करने के लिए संग्रहीत करता है। डेटा अखंडता को बनाए रखने के लिए, InnoDB विदेशी कुंजी संदर्भ-अखंडता बाधाओं का भी समर्थन करता है।

+0

इसलिए जब हम MySQL इंस्टॉल करते हैं तो हमें विशेष रूप से निर्दिष्ट करना होगा कि कौन सा संग्रहण इंजन हमारे MySQL डेटाबेस के रूप में उपयोग करना है ? – user130561

+3

जैसा कि मेरी पोस्ट में बताया गया है, डिफ़ॉल्ट MyISAM है। यदि आप आईएनएनओडीबी जैसे विभिन्न स्टोरेज इंजन की विशेषताओं का उपयोग करना चाहते हैं, तो हाँ आपको निर्दिष्ट करने की आवश्यकता होगी। यह इंस्टॉल के दौरान नहीं किया जाता है, बल्कि यह प्रारंभिक तालिका निर्माण के दौरान किया जाता है। – mluebke

+2

लेकिन इसके अनुसार: - http://dev.mysql.com/doc/refman/5.7/en/storage-engines.html; डिफ़ॉल्ट इंजन InnoDB है। – Harsha

31

InnoDB और MyISAM

पर एक नज़र InnoDB MySQL के लिए एक भंडारण इंजन है है, सभी मौजूदा बाइनरी MySQL एबी द्वारा वितरित में मानक के रूप में शामिल थे। MySQL साथ प्रयोग के लिए इंजन उपलब्ध अन्य भंडारण पर इसका मुख्य वृद्धि एसिड अनुरूप लेनदेन समर्थन

MyISAM MySQL रिलेशनल डेटाबेस प्रबंधन प्रणाली संस्करणों के लिए डिफ़ॉल्ट संग्रहण इंजन पहले 5.5 1 करना है। यह पुराने आईएसएएम कोड पर आधारित है लेकिन इसमें कई उपयोगी एक्सटेंशन हैं। माईसाम की प्रमुख कमी लेनदेन समर्थन की अनुपस्थिति है। MySQL 5.5 और उससे अधिक के संस्करणों में इनो डीबी इंजन में पर स्विच किया गया है, संदर्भित अखंडता बाधाओं, और उच्च समरूपता सुनिश्चित करें।

+0

क्या हम अपने डेटाबेस के लिए एक ही समय में दोनों स्टोरेज इंजन का उपयोग कर सकते हैं? – user130561

+2

आप कर सकते हैं, क्योंकि प्रत्येक तालिका के लिए आप एक अलग भंडारण इंजन को परिभाषित कर सकते हैं। एक और सवाल यह है कि आपको चाहिए। MySQL दस्तावेज़ में इस विषय के बारे में कुछ स्पष्टीकरण हैं। – nano7

4

मैं जोड़ना चाहता था कि प्रति तालिका एक विशिष्ट स्टोरेज इंजन निर्दिष्ट करने की क्षमता है MySQL की महत्वपूर्ण ताकत है (उपयोग के आसान और बिना किसी ट्वीव के अच्छे प्रदर्शन)। सभी परिचालनों के लिए जहां लेनदेन की आवश्यकता होती है, बस इनो डीबी के साथ रहें। हालांकि, कुछ स्थितियों में लेनदेन की आवश्यकता नहीं होने पर माईसाम वास्तव में चीजों को गति दे सकता है - और इनो डीबी की तुलना में कम डिस्क स्थान और रैम की आवश्यकता होती है।

कहा कि, InnoDB बेहतर हर समय हो रही है:

InnoDB 1.1 Performance and Scalability Enhancements

3

माईसैम इनओडीबी के विपरीत एसीआईडी ​​का पालन नहीं करता है जो डेटा की अखंडता को बनाए रखने के लिए लेनदेन का पालन करता है।

MyISAM समवर्ती आवेषण का समर्थन करता है: एक मेज में कोई मुफ्त ब्लॉक डेटा फ़ाइल के बीच है, तो आप एक ही समय कि अन्य थ्रेड मेज से पढ़ रहे हैं पर इसे में नई पंक्तियाँ सम्मिलित कर सकते हैं। MySqlDoc

यही कारण है कि, माईसाम तेज है और कम जगह लेता है। उदाहरण के लिए, MySQL MyISAM स्टोरेज इंजन ट्रांज़ेक्शन का समर्थन नहीं करता है। constraints of MySQL MYISAMconcurrent-insert नामक एक बिट कहा जाता है डिफ़ॉल्ट रूप से, चर 1 पर सेट होता है और समवर्ती आवेषणों को अभी वर्णित किया जाता है। यदि यह 0 पर सेट है, समवर्ती आवेषण अक्षम हैं। यदि यह 2 पर सेट है, तो तालिका के अंत में समवर्ती आवेषणों को उन पंक्तियों के लिए भी अनुमति दी जाती है, जिन्होंने पंक्तियों को हटा दिया है। तालिका के मध्य में पंक्तियों को जोड़ने के लिए एक INSERT कथन निष्पादित किया जा सकता है, यदि तालिका के बीच में कोई छेद/हटाई गई पंक्तियां नहीं होती हैं (समवर्ती डालने के समय)।

डिफ़ॉल्ट अलगाव स्तर और mysql InnoDB "पुनरावर्तनीय पढ़ें" है। माईसाम के लिए, कोई लेनदेन नहीं है। InnoDB पंक्ति स्तर लॉकिंग का उपयोग करता है जबकि MyISAM केवल टेबल लेवल लॉकिंग का उपयोग कर सकता है, यही कारण है कि InnoDB में क्रैश रीवॉरी माइस्सम से बेहतर है। यदि कोई समवर्ती प्रभाव से बचना चाहता है तो उसे मैन्युअल रूप से तालिका स्तर लॉक प्राप्त करना होगा।

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