आप जिस से कुश्ती कर रहे हैं वह ऊर्ध्वाधर विभाजन है। यह प्रदर्शन को बेहतर बनाने के लिए एक भौतिक डेटाबेस डिज़ाइन तकनीक है। किसी भी भौतिक डेटाबेस डिजाइन तकनीक के साथ, इसकी प्रयोज्यता उन विशिष्ट प्रश्नों पर निर्भर करती है जिन्हें आप अनुकूलित करने का प्रयास कर रहे हैं और यदि यह तकनीक उन्हें अनुकूलित करेगी। एक तार्किक दृष्टिकोण से, यदि ये नए क्षेत्र आपकी इकाई के लिए उम्मीदवार कुंजी पर निर्भर करते हैं तो वे इसके बारे में तथ्य हैं जो इसके साथ संबंधित हैं। पहले आपको यह सुनिश्चित करना चाहिए कि आप अपने उम्मीदवार कुंजी पर इन नए क्षेत्रों की कार्यात्मक निर्भरता को पूरी तरह से समझने के लिए सत्यापित करें कि वे वास्तव में दैनिक पृष्ठ विचारों के बारे में तथ्य हैं। यदि वे हैं, तो उन्हें किसी अन्य तालिका में विभाजित करने का निर्णय लेना एक प्रदर्शन अनुकूलन है जिसे केवल तभी किया जाना चाहिए जब यह आपके प्रदर्शन लक्ष्यों को प्राप्त करता है।
सामान्य तौर पर, ऊर्ध्वाधर विभाजन उपयोगी होता है यदि आप इन नए स्तंभों को मूल तालिका में अन्य स्तंभों से अलग और विशिष्ट रूप से क्वेरी करेंगे। उन स्तंभों को किसी अन्य तालिका में रखने से जो आपकी मौजूदा तालिका के समान PK साझा करती हैं, आप इसे सीधे क्वेरी कर सकते हैं जब आप उन नए स्तंभों को चाहते हैं और बहुत अधिक थ्रू-पुट प्राप्त करते हैं क्योंकि आपके पास इस नई तालिका के लिए डिस्क पर प्रति पृष्ठ कई और पंक्तियाँ होंगी मूल तालिका से सभी कॉलम उन पंक्तियों पर नहीं बैठे होंगे। हालाँकि, यदि आप हमेशा इन स्तंभों को मूल तालिका में स्तंभों के साथ क्वेरी करेंगे, तो एक ऊर्ध्वाधर विभाजन बहुत ज्यादा मायने नहीं रखेगा क्योंकि आपको उन्हें प्राप्त करने के लिए हमेशा बाहरी जुड़ना होगा। डिस्क पर टेबल से पृष्ठ स्वतंत्र रूप से कभी भी शामिल नहीं हुए, कभी भी DBMS के बफर पूल में आते हैं, और इस तरह से जुड़ने पर हर क्वेरी के निष्पादन के साथ होना होगा, भले ही डेटा को बफ़र पूल में पिन किया गया हो। इस परिदृश्य में उन्हें मूल तालिका पर NULLABLE कॉलम बनाने से DBMS स्टोरेज इंजन को NULL होने पर उन्हें कुशलतापूर्वक स्टोर करने में सक्षम बनाया जा सकता है और पुनर्प्राप्ति पर शामिल होने की आवश्यकता को समाप्त कर सकता है।
यह मुझे लगता है जैसे आपका उपयोग मामला उत्तरार्द्ध है और उन्हें अपनी मूल तालिका में पूर्ण के रूप में जोड़ने से जाने का रास्ता है। लेकिन डेटाबेस डिजाइन में बाकी सब के साथ, यह निर्भर करता है, और सही निर्णय लेने के लिए आपको अपने अपेक्षित कार्यभार को जानना होगा और एक अच्छा विकल्प बनाना निर्भर करता है। ऊर्ध्वाधर विभाजन के लिए एक उचित उपयोग के मामले का एक अच्छा उदाहरण एक व्यक्ति खोज पैनल होगा, जहां आपके आवेदन में किसी व्यक्ति के बारे में बहुत कम आबादी वाली जानकारी होती है जिसे कोई व्यक्ति खोज करना चाहता है, लेकिन शायद ही कभी करता है। यदि आप उस जानकारी को एक अलग तालिका में रखते हैं, तो आपके पास प्रदर्शन के लिए कुछ अच्छे विकल्प हैं। आप खोज को लिख सकते हैं ताकि आपके पास 2 प्रश्न हों - एक जो मुख्य, हमेशा आबादी वाली जानकारी का उपयोग करता है (जैसे अंतिम नाम या एसएसएन) खोज करने के लिए, और जो बाहरी रूप से बहुत अधिक आबादी वाली सूचनाओं से जुड़ता है, जब वह खोज के लिए अनुरोध किया जाता है। या आप DBMS ऑप्टिमाइज़र का लाभ उठा सकते हैं यदि यह होस्ट किए गए वेरिएबल्स के किसी सेट के लिए पहचानने के लिए पर्याप्त स्मार्ट है कि बाहरी जुड़ाव की आवश्यकता नहीं है और यह प्रदर्शन नहीं करेगा, और इस प्रकार आपको केवल 1 क्वेरी बनाना होगा।
आप किस DBMS प्लेटफॉर्म का उपयोग कर रहे हैं? जिस तरह से प्लेटफार्म NULL कॉलम स्टोरेज को हैंडल करता है, वह आपकी क्वेरी को अनुकूलित करता है, साथ ही स्पार्स कॉलम सपोर्ट की उपलब्धता (SQL Server में यह है) निर्णय को प्रभावित करेगा। अंततः मैं प्रोडक्शन साइज़ डेटा और वर्कलोड के साथ एक परीक्षण वातावरण में दोनों डिज़ाइनों को आज़माने की सलाह दूंगा और यह देखना होगा कि आपके प्रदर्शन उद्देश्यों को कौन बेहतर करता है।