मैं एक वेब अनुप्रयोग बना रहा हूं जो एक MySQL डेटाबेस से जुड़ा हुआ है। इस समय मेरे पास दो विशाल टेबल हैं जिनमें प्रत्येक 40 मिलियन पंक्तियां हैं, और वे प्रतिदिन नई पंक्तियां प्राप्त कर रहे हैं (जो हर रोज ~ 500 000-1000 000 पंक्तियां जोड़ती है)।विशाल टेबल पर प्रतिदिन इंडेक्स जोड़ना और छोड़ना एक अच्छा अभ्यास है?
नई पंक्तियों को जोड़ने की प्रक्रिया रात के दौरान चलती है, जबकि कोई भी एप्लिकेशन का उपयोग नहीं कर सकता है, और नई पंक्तियों की सामग्री वर्तमान डेटाबेस पर कुछ बुनियादी SELECT
प्रश्नों के परिणाम पर निर्भर करती है। उन SELECT
कथन का परिणाम प्राप्त करने के लिए पर्याप्त रूप से पर्याप्त है, मैं प्रत्येक कॉलम पर सरल अनुक्रमणिका (एक सूचकांक प्रति कॉलम) का उपयोग कर रहा हूं जो कम से कम एक बार WHERE
खंड में दिखाई देता है।
बात यह है कि, दिन के दौरान, उन तालिकाओं के खिलाफ कुछ पूरी तरह से अलग प्रश्न चलते हैं, जिनमें कुछ "श्रेणी कहां खंड" (SELECT * FROM t1 WHERE a = a1 AND b = b1 AND (date BETWEEN d1 AND d2)
) शामिल हैं। मुझे इस बहुत उपयोगी मिनी-कुकबुक पर स्टैक पर पाया गया है जो आपको सलाह देता है कि डेटाबेस पर पूछे जाने वाले तरीके के आधार पर आपको किस इंडेक्स का उपयोग करना चाहिए: http://mysql.rjweb.org/doc.php/index_cookbook_mysql वे कंपाउंड इंडेक्स का उपयोग करने की सलाह देते हैं: मेरे उदाहरण क्वेरी में इंडेक्स (ए, बी , तारीख)।
यह वास्तव में दिन के दौरान चलने वाले प्रश्नों की गति में वृद्धि (1 मिनट से 8 सेकंड तक तो मैं वास्तव में खुश था)।
हालांकि, उन यौगिक इंडेक्स के साथ, रात के दौरान नई पंक्तियों को जोड़ने के लिए आवश्यक समय पूरी तरह विस्फोट (दैनिक सामग्री जोड़ने में एक से अधिक दिन लगेंगे)।
यहां मेरा प्रश्न है: क्या हर रात सभी इंडेक्स को छोड़ना, नई सामग्री जोड़ना और दैनिक इंडेक्स का बैक अप रखना ठीक है? या यह खतरनाक होगा क्योंकि सूचकांक हर दिन पुनर्निर्मित नहीं किया जाता है, खासकर ऐसी बड़ी तालिकाओं पर? मुझे पता है कि इस तरह के एक ऑपरेशन में कुल दो घंटे लगेंगे (ड्रॉप और इंडेक्स को फिर से बनाएं)।
मुझे ALTER TABLE table_name DISABLE KEYS;
के अस्तित्व से अवगत है, लेकिन मैं इनो डीबी का उपयोग कर रहा हूं और मुझे विश्वास है कि यह इनो डीबी टेबल पर काम करने के लिए नहीं बनाया गया है।
किसी भी वरिष्ठ सलाह का स्वागत किया जाएगा! अग्रिम धन्यवाद।
यदि आप हर दिन 500k से 1m नई पंक्तियां जोड़ रहे हैं, तो 1 साल के समय में आपके पास 222 होगा।5 मीटर पंक्तियां, इसलिए वर्तमान राशि से 5 गुना अधिक, यदि वर्तमान में 2 घंटे लगते हैं, तो गति की एक रैखिक गिरावट (असंभव) मानते हुए, इसमें 10 घंटे लगेंगे। दो साल में यह पूरे दिन लगेगा और आप कभी भी एप्लिकेशन का उपयोग करने में सक्षम नहीं होंगे। अगर मैं आप थे तो मैं टेबल विभाजन के बारे में सोचना शुरू कर दूंगा। साथ ही, क्या आपको डेटा को अपने सबसे दानेदार स्तर पर पूछताछ करने की आवश्यकता है? यदि नहीं, तो डेटा को अधिक कुशल बनाने के लिए आप ओलाप डेटाबेस और/या घन को देखना चाहेंगे। – GarethD
आप सही हैं, बढ़ने के लिए पंक्तियों की मात्रा, लेकिन यह अधिकतम राशि तक पहुंच जाएगी क्योंकि मैं नए लोगों को जोड़ने के बाद रोजाना एक वर्ष से अधिक की पंक्तियों को हटा रहा हूं। वैसे भी, मैं उन ओलाप डेटाबेस पर एक नज़र डालने जा रहा हूं। अगर आपके पास कुछ अच्छा दस्तावेज है तो मुझे इसे प्राप्त करने में खुशी होगी! – Tchopane