2008-09-03 6 views
17

में इन्सर्ट बनाम अपडेट की लागत मेरे पास एक मिलन पंक्तियों से अधिक तालिका है। इस तालिका का उपयोग tiff छवियों को इंडेक्स करने के लिए किया जाता है। प्रत्येक छवि में date, number इत्यादि जैसे फ़ील्ड हैं। मेरे पास ऐसे उपयोगकर्ता हैं जो इन छवियों को 500 के बैचों में इंडेक्स करते हैं। मुझे यह जानने की ज़रूरत है कि 500 ​​पंक्तियों को पहले डालना बेहतर है या फिर 500 अपडेट करें या जब उपयोगकर्ता इंडेक्सिंग समाप्त कर लेता है, सभी डेटा के साथ 500 आवेषण करें। एक बहुत ही महत्वपूर्ण बात यह है कि अगर मैं पहले 500 आवेषण करता हूं, तो यह समय मेरे लिए मुफ्त है क्योंकि मैं इसे रात पहले कर सकता हूं।SQL सर्वर

तो सवाल यह है: क्या आवेषण या आवेषण और अपडेट करना बेहतर है, और क्यों? मैंने प्रत्येक छवि के लिए id मान परिभाषित किया है, और मेरे पास फ़ील्ड पर अन्य सूचकांक भी हैं।

उत्तर

25

एसक्यूएल सर्वर में अपडेट भूतल पंक्तियों में परिणाम - यानी एसक्यूएल एक पंक्ति को पार करता है और एक नया डालता है। बाद में पार पंक्ति को हटा दिया जाता है।

दोनों प्रविष्टियां और अपडेट पेज-स्प्लिट्स इस तरह से कारण बन सकते हैं, वे दोनों प्रभावी ढंग से 'डेटा' जोड़ते हैं, यह केवल अद्यतन पुराने सामान को पहले ध्वजांकित करता है।

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

इन्सर्ट हमेशा के बारे में हमेशा तेज होंगे, खासकर यदि वे या तो क्रम में हैं या यदि अंतर्निहित तालिका में क्लस्टर्ड इंडेक्स नहीं है।

तालिका में बड़ी मात्रा में डेटा डालने पर वर्तमान इंडेक्स को देखें - उन्हें बदलने और बनाने में कुछ समय लग सकता है। एक सूचकांक के बीच में मूल्य जोड़ना हमेशा धीमा होता है।

आप एक पता पुस्तिका में जोड़कर के रूप में विचार कर सकते हैं: श्री जेड अभी पिछले पृष्ठ पर जोड़ा जा सकता है, आप श्री एम

1

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

+0

जियोवानी के लिए बीच में अंतरिक्ष को ढूंढना होगा, जबकि, यह भी होगा इंडेक्सिंग (क्लस्टर्ड या गैर क्लस्टर) जैसे अन्य मुद्दों पर निर्भर करते हैं और कारक भरते हैं। आपकी विशिष्ट स्थिति बड़े पैमाने पर योगदान देगी कि आप कैसे आगे बढ़ते हैं। – Galwegian

2

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

चूंकि आप अपडेट के लिए आईडी मान (जिसे संभवतः अनुक्रमित किया गया है) का उपयोग कर रहे हैं, अपडेट के ओवरहेड बहुत कम होंगे। आपके अपडेट के दौरान आपके पास कम डेटा भी होगा।

आप बैच (500 आवेषण/अपडेट) स्तर पर लेनदेन बंद कर सकते हैं और प्रत्येक व्यक्तिगत रिकॉर्ड के लिए इसका उपयोग कर सकते हैं, इस प्रकार कुछ ओवरहेड को कम कर सकते हैं।

अंत में, अंतिम निर्णय लेने से पहले अपने सर्वर पर वास्तविक प्रदर्शन देखने के लिए इसका परीक्षण करें।

1

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

1

यह एक कट और सूखा सवाल नहीं है। कृष्णा और गैलेजीन के अंक इस पर हैं।

अपडेट के लिए, यदि अपडेट निश्चित-लंबाई वाले फ़ील्ड को प्रभावित कर रहे हैं तो प्रभाव कम हो जाएगा। यदि वर्चर या ब्लॉब फ़ील्ड अपडेट करते हैं, तो आप नए मान की पुरानी मान की लंबाई को पार करते समय अद्यतन के दौरान पेज स्प्लिट की लागत जोड़ सकते हैं।

1

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