2010-01-22 12 views
8

मेरे पास डेटाबेस है जिसमें लगभग 30 टेबल और 5 टेबल हैं, जो लिखने-केंद्रित हैं।एक डेटाबेस में MyISAM और InnoDB टेबल

मैं

  1. Convert पर विचार कर रहा हूँ 5 लिखने गहन टेबल InnoDB इंजन का उपयोग करें और InnoDB इंजन का उपयोग करने

  2. Convert MyISAM इंजन पर बाकी रखना सभी तालिकाओं के लिए।

मुझे आश्चर्य है कि कौन सा दृष्टिकोण बेहतर है?

अधिक विशिष्ट

कारण मैं MyISAM इंजन पर कुछ तालिका रखना चाहते हैं उनमें से कुछ के आसपास 1,000,000 पंक्तियां हैं है होना करने के लिए। मुझे यकीन नहीं है कि इनओ टेबल पर इनओडीबी में परिवर्तित होने के बाद "SELECT COUNT (*)" जैसे प्रश्नों के लिए यह कितना धीमा होगा।

मैंने कोई परीक्षण नहीं किया है। मैं स्विच शुरू करने से पहले आप में से किसी से कुछ सलाह प्राप्त करना पसंद करता हूं।

+0

क्यों दो दुनिया में सर्वश्रेष्ठ नहीं है: MySQL PBXT? –

उत्तर

12

इन दिनों, मैं हमेशा इनो डीबी का उपयोग करने के लिए डिफ़ॉल्ट हूं, विशेष रूप से लिखने वाली गहन सारणी पर जहां मेरा उल्लेख है कि MyISAM पूर्ण तालिका लॉकिंग से पीड़ित है। यहां एक बिंदु-बिंदु की तुलना है।

कारण MyISAM उपयोग करने के लिए:

  • टेबल्स का चयन भारी लोड के लिए वास्तव में तेजी से कर रहे हैं
  • तालिका स्तर ताले लिखने गहन बहु उपयोगकर्ता वातावरण के लिए उनके scalability की सीमा।
  • सबसे छोटा डिस्क स्थान की खपत
  • फुलटेक्स्ट सूचकांक
  • मर्ज किए गए और संकुचित टेबल।

    • एसिड लेनदेन
    • पंक्ति स्तर पर ताला लगा
    • लगातार पढ़ता है - आप उत्कृष्ट पढ़ने लिखने संगामिति तक पहुँचने के लिए अनुमति देता है:

    कारण InnoDB उपयोग करने के लिए।

  • प्राथमिक कुंजी क्लस्टरिंग - कुछ मामलों में उत्कृष्ट प्रदर्शन प्रदान करता है।
  • विदेशी कुंजी समर्थन।
  • दोनों इंडेक्स और डेटा पृष्ठों को कैश किया जा सकता है।
  • स्वत: क्रैश रिकवरी - यदि MySQL शट डाउन अशुद्ध था, तो InnoDB टेबल अभी भी स्थिर स्थिति में पुनर्प्राप्त होगा- कोई भी चेक/मरम्मत जैसे MyISAM की आवश्यकता हो सकती है।
  • सभी अपडेट इनो डीबी में लेनदेन इंजन से गुज़रना पड़ता है, जो अक्सर घटता है - गैर-लेनदेन स्टोरेज इंजन की तुलना में प्रदर्शन।

उपर्युक्त this site से लिया गया था, जो अब काम नहीं कर रहा है।

+1

COUNT (\ *) के बारे में आपकी अनुवर्ती चिंता अच्छी तरह से स्थापित है। InnoDB किसी तालिका में पंक्तियों की आंतरिक गणना नहीं रखता है, इसलिए एक चयन COUNT (\ *) निष्पादित करने से पूर्ण तालिका स्कैन होता है। जबकि इस तरह की एक क्वेरी को माईसाम के साथ कोई समय की आवश्यकता नहीं होगी, समकक्ष इनो डीबी क्वेरी में 1 मिलीलीटर पंक्तियों के लिए कई सेकंड लग सकते हैं। सामान्य समाधान एक और "काउंटर टेबल" बनाए रखना है जहां आप मैन्युअल रूप से वृद्धि और कमी के आधार पर एक गणना करने योग्य पंक्ति को डाला या हटा दिया है। आप यहां और अधिक पा सकते हैं: http://dev.mysql.com/doc/refman/5.0/en/innodb-restrictions.html "तालिका तालिका दिखाएं" के अंतर्गत। – BrainCore

2

प्रत्येक के लिए पेशेवर और विपक्ष।

के लिए

(1) पेशेवरों: कम डिस्क स्थान उपयोग, MyISAM ज्यादा पढ़ने के लिए भारी पहुँच पैटर्न

विपक्ष के लिए तेजी से: स्मृति InnoDB बफ़र्स और MyISAM कुंजी बफ़र्स के बीच साझा किया जाना चाहिए। innodb टेबल उनके myisam समकक्षों की तुलना में लगभग 4x बड़ा हैं। प्रोग्रामेटिक कोड डेडलॉक हैंडलिंग के लिए अनुकूलित किया जाना चाहिए।

बस याद रखें कि अगर आप अनुक्रमित कॉलम या प्राथमिक कुंजी बदल रहे हैं तो innodb भी लॉक होगा।

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