2010-01-26 15 views
8
begin transaction; 
create table person_id(person_id integer primary key); 
insert into person_id values(1); 
... snip ... 
insert into person_id values(50000); 
commit; 

यह कोड मेरी मशीन पर लगभग 0.9 सेकंड लेता है और एक डीबी फ़ाइल 392K लेता है। यह संख्या 1.4 सेकंड और 864K बन जाती है यदि मैं दूसरी पंक्ति कोक्लस्टर बनाम NonClustered प्राथमिक कुंजी

create table person_id(person_id integer nonclustered primary key); 

ऐसा क्यों है?

उत्तर

0

[केवल एक विचार के रूप]

हो सकता है कि जब आप एक संकुल कुंजी के रूप में पूर्णांक कॉलम लेने के लिए स्पष्ट रूप से निर्दिष्ट है, यह सिर्फ है कि नहीं करता है। लेकिन जब आप इसे अपने पूर्णांक कॉलम का उपयोग न करने के लिए कहते हैं, तो यह अभी भी दृश्यों के पीछे एक अनुक्रमणिका बनाता है लेकिन ऐसा करने के लिए एक अलग डेटाटाइप चुनता है, मान लीजिए, दो गुना बड़ा है। तब उन प्रविष्टियों में से प्रत्येक को तालिका में रिकॉर्ड का संदर्भ देना होता है और यहां आप जाते हैं, आकार विस्फोट हो रहा है।

2

प्राथमिक कुंजी को क्लस्टर करना पंक्तियों के साथ स्टोर करता है; इसका मतलब है कि यह कम जगह लेता है (क्योंकि कोई अलग इंडेक्स ब्लॉक नहीं है)। आम तौर पर इसका मुख्य लाभ यह है कि रेंज स्कैन आमतौर पर पंक्तियों तक पहुंच सकते हैं जो एक ही ब्लॉक में हैं, आईओ ऑपरेशंस को कम करते हैं, जो आपके पास एक बड़ा डेटा सेट (50k इंच नहीं) होने पर महत्वपूर्ण होता है।

मुझे लगता है कि 50k इन्ट्स एक कृत्रिम बेंचमार्क है और जिसे आप असली दुनिया में नहीं देखते हैं।

+0

मैं मिलती है, और न ही सीमा स्कैन कर रही पर योजना नहीं थी और केवल डालने प्रदर्शन के बारे में परवाह - वहाँ बनाने के लिए किसी भी बेहतर तरीका होगा पहले उदाहरणों की तुलना में तालिका? –

+0

यदि आप केवल प्रदर्शन सम्मिलित करने की परवाह करते हैं, तो आपको किसी भी अनुक्रमणिका का उपयोग नहीं करना चाहिए (यदि समर्थित है), या डेटा को टेक्स्ट फ़ाइल में लिखें। पाठ फ़ाइलों में शामिल होना बहुत तेज़ है। – MarkR

0

मैंने सम्मिलित बयानों को यादृच्छिक किया, और क्वेरी को आधे मिलियन से मूल्यों के साथ फिर से किया। दिलचस्प बात यह है कि क्लस्टर्ड और नॉनक्लस्टर्ड डीबी फाइलें अब सटीक मात्रा (बाइट के नीचे) लेती हैं। हालांकि क्लस्टर डीबी पर आवेषण अभी भी तेज हैं।

मेरे लिए यह काउंटर अंतर्ज्ञानी है। जब मैं डेटाबेस क्लस्टर को ये मान बताता हूं - मैं डेटाबेस को बता रहा हूं ... जब मैं उन्हें प्राप्त करने के लिए वापस आ जाता हूं तो ये मान बेहतर तरीके से होते हैं। जब मेरे पास विनिर्देश नहीं है, तो मैं अनिवार्य रूप से डीबी को कह रहा हूं - देखो इन मानों को ले लो और उन्हें व्यवस्थित करें हालांकि आपको पसंद है - जो भी आपके जीवन को आसान बनाता है।

सैद्धांतिक रूप से, इस अतिरिक्त स्वतंत्रता को कभी भी प्रश्नों को धीमा नहीं करना चाहिए। शायद उन्हें हर समय तेज न करें, लेकिन उन्हें धीमा न करें। विचार?

संबंधित मुद्दे