स्पष्ट के बिना MySQL को परिभाषित करना प्राथमिक कुंजी एक बहुत ही बुरा विचार है।
यदि कोई PK गुम है, तो MySQL एक अंतर्निहित (लेकिन बहुत वास्तविक) पूर्णांक स्वत:वृद्धि करने वाली प्राथमिक कुंजी बनाएगा।
यह PK InnoDB में प्रत्येक द्वितीयक कुंजी में शामिल किया जाएगा और MyISAM में आपका प्राथमिक सॉर्ट क्रम निर्धारित करेगा।
परिणाम
आपने प्रत्येक चयन, सम्मिलित और अपडेट के प्रदर्शन को धीमा कर दिया है।
बिना किसी उद्देश्य के।
InnoDB:तालिका डेटा प्राप्त करने के लिए अतिरिक्त लुकअप की आवश्यकता है
InnoDB में एक अतिरिक्त खोज करने की आवश्यकता है, क्योंकि सभी माध्यमिक अनुक्रमणिका PK को संदर्भित करती हैं न कि स्वयं पंक्तियों को।
MyISAM:व्यर्थ स्थान
MyISAM में दंड इतना अच्छा नहीं है, लेकिन आप अभी भी एक 4 बाइट अप्रयुक्त फ़ील्ड के साथ खींच रहे हैं जिसका उपयोग नहीं किया जाता है।
InnoDB + MyISAM:ऑटोइनक्रिकमेंट फ़ील्ड की बेकार पीढ़ी
चूंकि एक अंतर्निहित ऑटोइन्क्रिमेंटिंग पीके बन जाता है, और आपको जुड़ने के लिए एक अतिरिक्त ऑटोइनक्रिकमेंटिंग कुंजी की भी आवश्यकता होती है; डुप्लिकेट ऑटोइनक्रिकमेंट फ़ील्ड को रोकने के लिए, अब आपके पास 1 नहीं, बल्कि प्रति इंसर्ट 2 टेबल लॉक हैं।
InnoDB:डबल्स के ऊपर उल्लिखित लुकअप प्रोबम में शामिल होने के साथ
यदि आप किसी ऐसे क्षेत्र का उपयोग करके शामिल होते हैं जो PK नहीं है, तो InnoDB को प्रति जॉइन एक अतिरिक्त लुकअप करने की आवश्यकता है उस अन्य तालिका के रिकॉर्ड में जाने के लिए।
InnoDB:सबसे बुरी बात यह है कि आप इंडेक्स को कवर करने का लाभ खो देते हैं
आपने इंडेक्स को कवर करते हुए InnoDB में सबसे अच्छे ऑप्टिमाइज़ेशन में से एक को अक्षम कर दिया है।
यदि MySQL केवल इंडेक्स में डेटा का उपयोग करके क्वेरी को हल कर सकता है, तो यह तालिका को कभी नहीं पढ़ेगा, इसके परिणामस्वरूप एक महत्वपूर्ण गति होगी बढ़त। अब जबकि InnoDB में प्रत्येक अनुक्रमणिका का 50% अप्रयुक्त स्थान है, तो आपने उस अनुकूलन के उपयोग की संभावना को समाप्त कर दिया है।
कृपया इस ठेकेदार को क्लू स्टिक से हराएं!
कड़ियाँ:
http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/
(धीमा लिंक, लेकिन पढ़ने की सलाह दें)।
O'Reilly InnoDB के कवरिंग इंडेक्स पर
http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB
बीटीडब्ल्यू , यदि आपका ठेकेदार कहता है, तो इससे कोई फर्क नहीं पड़ता क्योंकि वह MyISAM का उपयोग कर रहा है, उसे फिर से हरा दें, आपको हमेशा InnoDB का उपयोग करना चाहिए जब तक कि आपके पास कोई अच्छा कारण न हो।
InnoDB उत्पादन में अधिक सुरक्षित है, MyISAM के पास इसका उपयोग करता है लेकिन बहुत आसानी से दूषित हो जाता है।