mysql - क्या डेटा के साथ टेबल भरने से पहले या डेटा के बाद एक इंडेक्स बनाना बेहतर होता है?




database indexing (4)

इससे इस समस्या पर कोई फर्क नहीं पड़ता क्योंकि:

  1. यदि आप तालिका में पहले डेटा जोड़ते हैं और इसके बाद आप इंडेक्स जोड़ते हैं। आपका इंडेक्स जनरेटिंग समय O(n*log(N)) लंबा होगा (जहां n पंक्तियों को जोड़ा गया है)। चूंकि वृक्ष gerating समय O(N*log(N)) तो यदि आप इसे पुराने डेटा और नए डेटा में विभाजित करते हैं तो आपको O((X+n)*log(N)) इसे आसानी से O(X*log(N) + n*log(N)) और इस प्रारूप में आप बस देख सकते हैं कि आप अतिरिक्त इंतजार करेंगे।
  2. यदि आप इंडेक्स जोड़ते हैं और डेटा डालते हैं। प्रत्येक पंक्ति (आपके पास नई नई पंक्तियां होती हैं) आप इसमें अतिरिक्त तत्व डालने के बाद अतिरिक्त समय O(log(N)) को पेड़ की संरचना को पुन: उत्पन्न करने के लिए आवश्यक होते हैं (नई पंक्ति से इंडेक्स कॉलम, क्योंकि अनुक्रमणिका पहले से मौजूद है और नई पंक्ति थी जोड़ा गया तो सूचकांक संतुलित संरचना के लिए पुन: उत्पन्न किया जाना चाहिए, यह लागत O(log(P)) जहां P एक सूचकांक शक्ति [सूचकांक में तत्व] है )। आपके पास नई नई पंक्तियां हैं, अंततः आपके पास n * O(log(N)) तो O(n*log(N)) सारांश अतिरिक्त समय।

मेरे पास लगभग 100 एम पंक्तियों की एक सारणी है जिसे मैं प्रतिलिपि बनाने के लिए प्रतिलिपि बनाने जा रहा हूं, एक अनुक्रमणिका जोड़ रहा हूं। मैं नई तालिका बनाने में लगने वाले समय से इतना चिंतित नहीं हूं, लेकिन यदि कोई डेटा डालने से पहले तालिका को बदलता है या पहले डेटा डालने से पहले और फिर इंडेक्स जोड़ता है तो बनाई गई अनुक्रमणिका अधिक कुशल होगी?


ज्यादातर मामलों में बाद में बनाए गए इंडेक्स बहुत तेजी से होते हैं। मामले में मामला: वर्चर (255) - (बिजनेस नेम) पर पंक्तियों के आयात के दौरान 20 मिलियन पंक्तियां - पंक्तियों को आयात करते समय सूचकांक - सबसे खराब मामलों में 20 सेकंड तक के खिलाफ एक मैच। ड्रॉप इंडेक्स और फिर से बनाएं - हर बार 1 सेकंड से कम लेने के खिलाफ मैच


पंक्तियों को जोड़ने के बाद सूचकांक बनाना शायद बेहतर है। न केवल यह तेज होगा, लेकिन पेड़ संतुलन शायद बेहतर होगा।

संपादित करें "संतुलन" शायद यहां शब्दों का सबसे अच्छा विकल्प नहीं है। बी-पेड़ के मामले में, यह परिभाषा से संतुलित है। लेकिन इसका मतलब यह नहीं है कि बी-पेड़ का इष्टतम लेआउट है। माता-पिता के भीतर बाल नोड वितरण असमान हो सकता है (भविष्य के अपडेट में अधिक लागत का कारण बनता है) और यदि अपडेट के दौरान संतुलन सावधानीपूर्वक नहीं किया जाता है तो पेड़ की गहराई आवश्यक से गहरी हो सकती है। यदि पंक्तियों को जोड़े जाने के बाद इंडेक्स बनाया गया है, तो यह बेहतर वितरण होगा। इसके अलावा, सूचकांक के निर्माण के बाद डिस्क पर इंडेक्स पेजों में कम विखंडन हो सकता है। यहां थोड़ी अधिक जानकारी


मुझे यकीन नहीं है कि यह वास्तव में सूचकांक दक्षता के लिए महत्वपूर्ण होगा, क्योंकि दोनों मामलों में आप इंडेक्स में नया डेटा डाल रहे हैं। सर्वर यह नहीं जानता कि मूल रूप से इसके निर्माण के बाद तक एक सूचकांक कितना असंतुलित होगा। जाहिर है, सूचकांक के बिना आवेषण करें।





indexing