"इस तालिका में उपयुक्त अनिर्णय हैं, लेकिन क्वेरी चलाते समय एक बड़ा हैंगअप बन रहा है"
जब तक SQL सर्वर किसी क्वेरी को चलाते हुए विभाजनों को समाप्त करने में सक्षम नहीं होता है, तब तक केवल विभाजन प्रदर्शन क्वेरी में मदद नहीं करता है। आपके विभाजन का तरीका आपके विभाजन के तरीके के अनुरूप होना चाहिए। हमें विभाजन क्षेत्र के रूप में उपयोग करने के लिए केवल एक फ़ील्ड मिलता है, इसलिए यदि वह फ़ील्ड आपके WHERE क्लॉज़ में शामिल नहीं है, तो आपके पास विभाजन होने के बावजूद पूरी तालिका को स्कैन करने की संभावना है।
"और सिर्फ इसके आकार के कारण।"
विभाजन कुछ रखरखाव कार्यों को आसान बना सकता है, लेकिन अभी भी कुछ चीजें हैं जो हम विभाजन-दर-विभाजन के आधार पर नहीं कर सकते हैं। यदि इंडेक्स मेंटेनेंस और स्टैटस अपडेट आपको समस्याएं पैदा कर रहे हैं, तो आप डिज़ाइन को आर्काइव टेबल और लाइव-अपडेटेड टेबल में विभाजित करना बेहतर समझते हैं। जब आपको समय-समय पर डेटा को लाइव टेबल से संग्रह तालिका में स्थानांतरित करने की आवश्यकता होती है, तो आप ऐसा करते हैं, 100% भरण कारक के साथ अनुक्रमणिका को फिर से बनाते हैं, पूर्ण स्कैन के साथ आँकड़े अपडेट करते हैं, और फिर इसकी फाइलग्रुप को केवल पढ़ने के लिए सेट करते हैं। विभाजन तालिका भार के साथ मदद कर सकती है - लेकिन लाइव तालिका का विभाजन नहीं हो सकता है। (मैं यहां कई उन्नत अवधारणाओं को टॉस कर रहा हूं जैसे कि यह त्वरित और सरल है, लेकिन मैं यहां कुछ पृष्ठभूमि के बारे में बता रहा हूं)
"ऐसा प्रतीत होता है कि विभाजन का उपयोग करते हुए कम कोड परिवर्तन की आवश्यकता होगी।"
Sorta थोड़े - यह पहली नज़र में इस तरह दिखता है, लेकिन जितना अधिक आप इसे प्राप्त करते हैं, आपको विभाजन विचारों जैसे विकल्प मिलते हैं। आप मौजूदा तालिका का नाम बदल सकते हैं, इसके स्थान पर एक दृश्य में रख सकते हैं, और फिर आप अपने ऐप को बदले बिना अंतर्निहित तालिकाओं में अपने परिवर्तन कर सकते हैं (और कई तालिकाओं को जोड़ सकते हैं)।
मैंने यहाँ विभाजन के नुकसान के बारे में अधिक लिखा है:
http://www.brentozar.com/archive/2008/06/sql-server-partitioning-not-the-answer-to-everything/