2011-01-02 14 views
5

मैंने विभिन्न धागे पढ़े हैं जिनके बारे में InnoDB और MyISAM के बीच बेहतर है। ऐसा लगता है कि बहस का उपयोग करना है या दूसरा। क्या तालिका के आधार पर दोनों का उपयोग करना संभव नहीं है?इनो डीबी या माईसाम - दोनों क्यों नहीं?

ऐसा करने में क्या नुकसान होंगे? जहां तक ​​मैं कह सकता हूं, इंजन को CREATE TABLE कमांड के दौरान सेट किया जा सकता है। इसलिए, अक्सर पढ़ने वाली कुछ तालिकाएं माईसाम पर सेट की जा सकती हैं, लेकिन जिन तालिकाओं को लेनदेन समर्थन की आवश्यकता होती है वे इनो डीबी का उपयोग कर सकते हैं।

+1

एक संकुल प्राथमिक कुंजी सूचकांक क्या है? http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html क्लस्टर प्राथमिक कुंजी इंडेक्स सामान्य बीटी इंडेक्स से बेहतर क्यों हैं? http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

उत्तर

13

आप एक ही डेटाबेस में MyISAM और InnoDB टेबल दोनों रख सकते हैं। हालांकि, आपको बहुत बड़ी टेबल होने पर क्या मिलेगा, माईसाम टेबल-लॉक मुद्दों का कारण बन जाएगा। आखिरकार यह क्या करता है, यह एक ही लेनदेन के लिए पूरी तालिका को लॉक करता है, जो बहुत खराब है यदि आपके पास अपनी वेबसाइट का उपयोग करने वाले बहुत से उपयोगकर्ता हैं। उदाहरण के लिए यदि आपके पास कोई उपयोगकर्ता आपकी साइट पर कुछ खोज रहा है और क्वेरी को पूरा करने में कुछ मिनट लगते हैं, तो कोई अन्य उपयोगकर्ता उस अवधि के दौरान आपकी साइट का उपयोग नहीं कर सकता क्योंकि पूरी तालिका लॉक है।

दूसरी तरफ InnoDB पंक्ति-स्तर लॉकिंग का उपयोग करता है, यानी, यह पंक्ति लेनदेन के दौरान तालिका से लॉक की गई एकमात्र पंक्ति है। InnoDB खोजों में धीमा हो सकता है क्योंकि यह MyISAM जैसी पूर्ण टेक्स्ट खोज प्रदान नहीं करता है, लेकिन जब आप इसे MyISAM के टेबल-स्तरीय लॉकिंग से तुलना करते हैं तो यह एक बड़ी समस्या नहीं है। यदि आप कई बड़ी साइटों की तरह इनो डीबी का उपयोग करते हैं, तो आप पूर्ण पाठ खोजों के लिए Sphinx जैसे सर्वर साइड सर्च इंजन का उपयोग कर सकते हैं। या आप f00 जैसे खोज करने के लिए एक MyISAM तालिका का उपयोग भी कर सकते हैं। मैं मुख्य रूप से पंक्ति-स्तर लॉकिंग सुविधा के कारण InnoDB की अनुशंसा करता हूं, लेकिन यह भी कि आप कई अन्य तरीकों से पूर्ण पाठ खोज को कार्यान्वित कर सकते हैं।

असल में, यदि आपके पास बहुत सारे चयन, प्रविष्टियों के साथ-साथ अपडेट के साथ एक संदेश बोर्ड एप्लिकेशन है, तो InnoDB शायद आम तौर पर उपयुक्त विकल्प है। लेकिन यदि आप ऐसा कुछ नहीं बना रहे हैं (या पंजीकृत उपयोगकर्ताओं के साथ कोई अन्य चीज़) और अधिकतर स्थिर सामग्री (या लिखने से अधिक पढ़ते हैं) के साथ काम करते हैं, तो आप MyISAM का उपयोग कर सकते हैं।

+4

अगर आपको पूर्ण टेक्स्ट खोज की आवश्यकता है तो आप केवल एक मयिसम टेबल बनाएं और इसे अपने अच्छी तरह से क्लस्टर्ड innodb डेटा में वापस अनुक्रमणित करने के लिए इसका उपयोग करें - सरल। –

+0

हां, यह भी एक बहुत अच्छा विकल्प है। –

+0

धन्यवाद, महान जवाब।मेरे आवेदन के आधार पर, यह InnoDB का उपयोग करने के लिए सबसे अच्छा लगता है। एक मुआवजे के रूप में स्फिंक्स का उल्लेख करने के लिए – Skoder

3

हाँ वास्तव में आप दोनों एक ही डेटाबेस में उपयोग कर सकते हैं, आप प्रत्येक तालिका को अलग से चुन सकते हैं।

0

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

1

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

और, MyISAM अच्छा है यदि आपको ऐसे डेटाबेस की आवश्यकता है जो तालिका-लॉक चीज़ पर इसकी कमी पर विचार करने के बजाय ज्यादातर लिखने (INSERT और UPDATES) लिखने के बजाय बहुत से पढ़े (चयन) निर्देश ले रहे हों।

आप जांचना चाहेंगे;
Pros and Cons of InnoDB
Pros and Cons of MyISAM

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