मान लेते हैं कि आप तीन स्तंभों के साथ एक बड़े पैमाने पर तालिका है जैसा कि नीचे दिखाया करते हैं:एसक्यूएल सर्वर - विभाजित टेबल्स बनाम क्लस्टर्ड इंडेक्स?
[id] INT NOT NULL,
[date] SMALLDATETIME NOT NULL,
[sales] FLOAT NULL
भी मान लें कि आपके एक भौतिक डिस्क और एक filegroup (प्राथमिक) तक सीमित हैं। आप उम्मीद करते हैं कि इस तालिका में 100,000+ तिथियों (आसानी से 1 बी + रिकॉर्ड) में 10,000,000+ आईडी के लिए बिक्री होनी चाहिए।
कई डेटा वेयरहाउसिंग परिदृश्यों के साथ, डेटा आमतौर पर तिथि के अनुसार अनुक्रमिक रूप से बढ़ेगा (यानी, प्रत्येक बार जब आप डेटा लोड करते हैं, तो आप नई तिथियां डालेंगे, और शायद डेटा की कुछ और तारीखों को अपडेट कर सकते हैं)। विश्लेषणात्मक उद्देश्यों के लिए, डेटा को अक्सर ~ 10,000 आईडी के यादृच्छिक सेट के लिए पूछताछ और समेकित किया जाएगा जिसे किसी अन्य तालिका के साथ जुड़ने के माध्यम से निर्दिष्ट किया जाएगा। अक्सर, ये प्रश्न दिनांक सीमा निर्दिष्ट नहीं करते हैं, या बहुत विस्तृत दिनांक सीमा निर्दिष्ट करते हैं, जो मुझे मेरे प्रश्न पर ले जाता है: इस तालिका को अनुक्रमणित/विभाजित करने का सबसे अच्छा तरीका क्या है?
मैं थोड़ी देर के लिए इस बारे में सोचा है, लेकिन विरोधी समाधान के साथ अटक कर रहा हूँ:
विकल्प # 1: डेटा दिनांक के आधार पर क्रमिक रूप से लोड किया जाएगा के रूप में, के रूप में संकुल सूचकांक (और प्राथमिक कुंजी) को परिभाषित [ तारीख], [आईडी]। तालिका में नए डेटा के तेज़ी से चलने की इजाजत देने की तिथि पर एक "स्लाइडिंग विंडो" विभाजन समारोह/योजना भी बनाएं। पूछताछ में सहायता के लिए संभावित रूप से आईडी पर एक गैर-क्लस्टर सूचकांक बनाएं।
अपेक्षित परिणाम # 1: इस सेटअप डेटा लोड प्रयोजनों के लिए बहुत तेजी से होगा, लेकिन उप इष्टतम जब यह विश्लेषणात्मक की बात आती है एक बुरी स्थिति में के रूप में पढ़ता है, (कोई पहचान-पत्र के सेट के साथ तारीखों के द्वारा सीमित, अशुभ पूछे गए), डेटा पृष्ठों का 100% पढ़ा जा सकता है।
विकल्प # 2: डेटा एक समय में केवल आईडी के एक छोटे सबसेट के लिए क्वेरी की हो जाएगा के रूप में, के रूप में [id] क्लस्टर सूचकांक (और प्राथमिक कुंजी) को परिभाषित, [तिथि]। विभाजित तालिका बनाने के लिए परेशान मत करो।
अपेक्षित परिणाम # 2: डेटा लोड करने की बात आने पर अपेक्षित भारी प्रदर्शन मारा गया क्योंकि हम अब तिथि से तुरंत सीमित नहीं हो सकते हैं। मेरे विश्लेषणात्मक प्रश्नों की बात होने पर अपेक्षित विशाल प्रदर्शन लाभ के रूप में यह पढ़ने वाले डेटा पृष्ठों की संख्या को कम करेगा।
विकल्प # 3: क्लस्टर (और प्राथमिक कुंजी) निम्नानुसार है: [आईडी], [दिनांक]; तारीख पर "स्लाइडिंग विंडो" विभाजन समारोह/योजना।
अपेक्षित परिणाम # 3: सुनिश्चित नहीं है कि क्या उम्मीद करनी है। यह देखते हुए कि क्लस्टर इंडेक्स में पहला कॉलम [आईडी] है और इस प्रकार (यह मेरी समझ है) डेटा आईडी द्वारा व्यवस्थित किया जाता है, मैं अपने विश्लेषणात्मक प्रश्नों से अच्छा प्रदर्शन की अपेक्षा करता हूं। हालांकि, डेटा तिथि के आधार पर विभाजित है, जो क्लस्टर इंडेक्स की परिभाषा के विपरीत है (लेकिन अभी भी तारीख के रूप में गठबंधन है इंडेक्स का हिस्सा है)। मुझे इस परिदृश्य से बात करने वाले बहुत से दस्तावेज नहीं मिले हैं और यदि कोई है, तो मुझे लाभ का लाभ मिल सकता है, जो मुझे अपने अंतिम, बोनस प्रश्न पर लाता है:
यदि मैं एक फ़ाइल समूह पर एक टेबल बना रहा हूं एक कॉल पर क्लस्टर इंडेक्स के साथ एक डिस्क, क्या कोई लाभ है (डेटा लोड करते समय विभाजन स्विचिंग के अलावा) जो एक ही कॉलम पर विभाजन को परिभाषित करने से आता है?
आपका अंतिम बिंदु दिलचस्प है। फ्लोट से न्यूमेरिक में कनवर्ट करने से आप किस तरह के प्रदर्शन लाभ की अपेक्षा करेंगे? –
आप जो डेटा संग्रहीत कर रहे हैं उसके बारे में आप अधिक सटीक हो सकते हैं और संख्यात्मक डेटा प्रकार एक सटीक संख्या है जहां फ्लोट अनुमानित संख्या है। – GateKiller