2009-12-28 16 views
19

किसी ने मुझे अभी बताया कि InnoDB MyISAM से काफी बेहतर है। तो जब मैं एक टेबल बनाता हूं, तो क्या मुझे हमेशा MyISAM के बजाय InnoDB इंजन का उपयोग करने का प्रयास करना चाहिए? या दोनों के पास इसका बड़ा लाभ है?क्या मुझे हमेशा MyISQL पर MySQL InnoDB पसंद करना चाहिए?

+0

http://www.mikebernat.com/blog/MySQL_-_InnoDB_vs_MyISAM –

+1

नहीं; दोनों के पास इसका लाभ है। – philfreo

उत्तर

36

MyISAM लेनदेन रहित और ढेर-संगठित है। रिकॉर्ड तालिका में पंक्ति ऑफसेट द्वारा पहचाने जाते हैं और इंडेक्स इस ऑफसेट को पंक्ति सूचक के रूप में संग्रहीत करते हैं।

InnoDB लेनदेन का समर्थन करता है और सूचकांक-संगठित है। रिकॉर्ड PRIMARY KEY के मूल्य से पहचाने जाते हैं (या एक छुपा आंतरिक कॉलम है PRIMARY KEY परिभाषित नहीं है) और B-Tree में संग्रहीत हैं। द्वितीयक अनुक्रमणिका एक पंक्ति सूचक के रूप में PRIMARY KEY का मान संग्रहीत करती हैं।

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

PRIMARY KEY पूछताछ वाली क्वेरी आमतौर पर InnoDB टेबल पर तेज़ होती हैं।

MyISAM टेबल तालिका के मेटाडेटा में तालिका में अभिलेखों की संख्या की दुकान, तो इस कारण इस तरह के प्रश्नों:

SELECT COUNT(*) 
FROM myisamtable 

तत्काल कर रहे हैं।

MyISAM टेबल पूरी तरह से DML संचालन (कई अपवादों के साथ) पर बंद कर दिए गए हैं।

InnoDB टेबल व्यक्तिगत रिकॉर्ड और इंडेक्स अंतराल को लॉक करते हैं, हालांकि ये स्कैन किए गए रिकॉर्ड और अंतराल हैं, न केवल WHERE स्थिति से मेल खाते हैं। यह उन तथ्यों के बावजूद रिकॉर्ड लॉक हो सकता है जो वे मेल नहीं खाते हैं।

InnoDB टेबल रेफरेंसियल अखंडता का समर्थन करते हैं (FOREIGN KEY एस)। MyISAM टेबल नहीं है।

कई परिदृश्य हैं जो दोनों इंजनों के लाभ दिखा सकते हैं।

8

यह बस डाल करने के लिए:

आप InnoDB का उपयोग करना चाहिए:

  • आप लेन-देन समर्थन
  • की जरूरत है अगर आप विदेशी कुंजी
  • जरूरत

आप का उपयोग करना चाहिए MyISAM:

  • यदि आप उपरोक्त AND
  • आप की जरूरत गति (तेज़ डेटाबेस कार्यों)
+6

आप इस http://www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ को गति के बारे में पढ़ना चाहेंगे। –

5

IMHO आप हमेशा व्यवहार समर्थन है जो हर रिलेशनल डाटाबेस सिस्टम के मूल में है की वजह से MyISAM से अधिक InnoDB को प्राथमिकता देनी चाहिए जरूरत नहीं है।

1

इनो डीबी एक पूरी तरह से एसीआईडी ​​अनुपालन डेटाबेस इंजन है और इसलिए लेनदेन के लिए समर्थन प्रदान करता है, इसलिए, यह इसलिए MyISAM डेटाबेस से धीमा हो सकता है जो एक अलग दिशा में अनुकूलित किया जाता है।

इसलिए यदि आपको लेन-देन की आवश्यकता है तो InnoDB (या PostgreSQL जैसे अन्य आरडीबीएमएस) स्पष्ट विकल्प है।

आप दोनों का उपयोग कर सकते Wikipedia

0

पर एक उचित तुलना से अधिक नहीं है। आप अपने लेखन डेटाबेस/लेनदेन के लिए InnoDB का उपयोग कर सकते हैं, लेकिन एक MyISAM डेटाबेस से वापस पढ़ें, जो denormalized है। यह दोनों दुनिया के सर्वश्रेष्ठ प्रदान करता है। आप जानते हैं कि आप इनओडीबी से संदर्भित अखंडता के साथ डेटा सुरक्षित हैं, और आप जितनी जल्दी चाहें इसे पढ़ सकते हैं जैसे आप माईसाम के साथ चाहते हैं।

+0

क्या आप दोनों इंजनों का उपयोग करने के तरीके पर एक लिंक का उल्लेख कर सकते हैं – Amareswar

11

सरल उत्तर: नहीं, आपको नहीं करना चाहिए।

प्रत्येक इंजन के बारे में कुछ अंक:

InnoDB

  • विदेशी कुंजी मजबूरी और लेन-देन के लिए पूर्ण समर्थन। (एसीआईडी ​​अनुपालन)
  • पंक्ति-स्तर लॉकिंग।
  • तर्कसंगत रूप से तेजी से INSERT बयान। (और संभवतः भी अपडेट)

MyISAM

  • तेज़ SELECT स्टेटमेंट्स। पूर्ण पाठ के लिए
  • समर्थन खोज
  • ब्लॉब और पाठ स्तंभ
  • 4x अधिकतम संग्रहण सीमा अनुक्रमित किया जा सकता, InnoDB (256TB बनाम 64TB) की तुलना में

मैनुअल में अधिक देखें:

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