यह आश्चर्यजनक रूप से बड़ा प्रदर्शन अंतर है, लेकिन मैं कुछ चीजों के बारे में सोच सकता हूं जो योगदान दे सकते हैं।
मायिसैम ऐतिहासिक रूप से इनो डीबी की तुलना में तेज़ी से देखा गया है, लेकिन इनो डीबी के हाल के संस्करणों के लिए, यह बहुत से मामलों के उपयोग के लिए बहुत सही है। MyISAM आमतौर पर केवल पढ़ने योग्य तालिकाओं के तालिका स्कैन के लिए तेज़ है। अधिकांश अन्य उपयोग मामलों में, मैं आमतौर पर इनो डीबी को तेज़ी से ढूंढता हूं। अक्सर कई बार तेजी से। MySQL के अधिकांश उपयोग में टेबल लॉक माईसाम के लिए मौत की घंटी है।
MyISAM उसके प्रमुख बफर में अनुक्रमित संचित करता है। शायद आपने अपनी कुछ बड़ी तालिका के लिए इंडेक्स को कैश करने के लिए कुंजी बफर को बहुत छोटा सेट किया है।
MyISAM ओएस डिस्क कैश में .MYD फ़ाइलों से तालिका डेटा कैश करने के लिए ओएस पर निर्भर करता है। यदि ओएस मेमोरी पर कम चल रहा है, तो यह डिस्क कैश डंप करना शुरू कर देगा। यह डिस्क से पढ़ने को रखने के लिए मजबूर कर सकता है।
InnoDB इंडेक्स और डेटा दोनों को अपने मेमोरी बफर में कैश करता है। यदि आप innodb_flush_method को O_DIRECT पर सेट करते हैं, तो आप ओएस को अपने डिस्क कैश का उपयोग न करने के लिए कह सकते हैं, हालांकि यह ओएस एक्स पर समर्थित नहीं है।
InnoDB आमतौर पर 16kb पृष्ठों में डेटा और अनुक्रमणिका को बफर करता है। प्रश्नों के बीच @Eid के मान को कैसे बदल रहे हैं, इस पर निर्भर करता है कि पिछली क्वेरी से डिस्क पढ़ने के कारण यह पहले से ही एक क्वेरी के लिए डेटा कैश कर चुका है।
सुनिश्चित करें कि आपने इंडेक्स को समान रूप से बनाया है। यह जांचने के लिए व्याख्या करें कि MySQL इंडेक्स का उपयोग कर रहा है या नहीं। चूंकि आपने तालिका बनाने या इंडेक्स दिखाने के बजाय वर्णन का आउटपुट शामिल किया है, इसलिए मैं यह नहीं बता सकता कि entity_id एक समग्र अनुक्रमणिका का हिस्सा है या नहीं। यदि यह एक समग्र सूचकांक का पहला हिस्सा नहीं था, तो इसका उपयोग नहीं किया जाएगा।
आप MySQL की एक अपेक्षाकृत आधुनिक संस्करण का उपयोग कर रहे हैं, तो क्वेरी चलाने से पहले निम्नलिखित कमांड चलाएँ:
सेट रूपरेखा = 1;
इससे आपके सत्र के लिए क्वेरी प्रोफाइलिंग चालू हो जाएगी। क्वेरी चलाने के बाद,
प्रोफ़ाइल दिखाएं;
इससे आपको उन प्रश्नों की सूची दिखाई देगी, जिनके लिए प्रोफ़ाइल उपलब्ध हैं। मुझे लगता है कि यह डिफ़ॉल्ट रूप से अंतिम 20 रखता है। मान लें कि आपकी क्वेरी पहली थी, रन:
क्वेरी 1 के लिए प्रोफ़ाइल दिखाएं;
फिर आप अपनी क्वेरी चलाने में प्रत्येक चरण की अवधि देखेंगे। यह निर्धारित करने के लिए बेहद उपयोगी है कि (उदाहरण के लिए, टेबल लॉक, सॉर्टिंग, टेम्पलेट टेबल इत्यादि बनाना) एक क्वेरी को धीमा कर रहा है।
एक नई माईसैम तालिका बनाने और उस तालिका के विरुद्ध क्वेरी का समय देने का एक उचित-सरल परीक्षण इस अनुमान की पुष्टि कर सकता है। –