मैंने पढ़ा है कि एसक्यूएल सर्वर में टेबल इंडेक्स जोड़ने के लिए ट्रेडऑफ में से एक चुनिंदा प्रश्नों के प्रदर्शन को लाभ पहुंचाने के लिए सम्मिलित/अद्यतन/हटाए गए प्रश्नों की बढ़ी हुई लागत है।एसक्यूएल सर्वर इंडेक्स लागत
मैं अवधारणात्मक रूप से समझ सकता हूं कि किसी सम्मिलन के मामले में क्या होता है क्योंकि SQL सर्वर को नई पंक्तियों से मेल खाने वाली प्रत्येक अनुक्रमणिका में प्रविष्टियां लिखनी पड़ती हैं, लेकिन अपडेट और डिलीट मेरे लिए थोड़ा और अस्पष्ट है क्योंकि मैं काफी लपेट नहीं सकता डेटाबेस इंजन को क्या करना है इसके चारों ओर सिर।
के एक उदाहरण के रूप DELETE लेने के लिए और यह मान रहा निम्न स्कीमा (क्षमा छद्म एसक्यूएल)
TABLE Foo
col1 int
,col2 int
,col3 int
,col4 int
PRIMARY KEY (col1,col2)
INDEX IX_1
col3
INCLUDE
col4
अब है, अगर मैं बयान जारी
DELETE FROM Foo WHERE col1=12 AND col2 > 34
मैं क्या इंजन को समझें तालिका को अद्यतन करने के लिए करना चाहिए (या अगर आप पसंद करते हैं तो क्लस्टर्ड इंडेक्स)। इंडेक्स को पंक्तियों की सीमा को हटाने और इसे करने में आसान बनाने के लिए सेट अप किया गया है।
हालांकि, इस बिंदु पर इसे IX_1 को अपडेट करने की आवश्यकता है और मैंने जो क्वेरी दी है, वह डेटाबेस इंजन को अपडेट करने के लिए पंक्तियों को खोजने का कोई स्पष्ट तरीका नहीं देता है। क्या इस बिंदु पर इसे एक पूर्ण इंडेक्स स्कैन करने के लिए मजबूर किया गया है? क्या इंजन पहले क्लस्टर इंडेक्स से पंक्तियों को पढ़ता है और इंडेक्स के खिलाफ एक स्मार्ट आंतरिक डिलीट उत्पन्न करता है?
अगर मुझे हुड के नीचे क्या चल रहा है, तो मुझे यह समझने में मदद मिल सकती है, लेकिन मुझे लगता है कि मेरा असली सवाल यह है। मेरे पास एक डेटाबेस है जो हटाने में काफी समय व्यतीत कर रहा है और मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं इसके बारे में क्या कर सकता हूं।
जब मैं हटाने के लिए निष्पादन योजना प्रदर्शित करता हूं, तो यह तालिका तालिका पर "क्लस्टर्ड इंडेक्स डिलीट" के लिए एक प्रविष्टि दिखाता है जो विवरण अनुभाग में सूचीबद्ध अन्य सूचकांक जिन्हें अद्यतन करने की आवश्यकता है लेकिन मुझे कोई संकेत नहीं मिलता है इन अन्य सूचकांक की सापेक्ष लागत का।
क्या वे सभी इस मामले में बराबर हैं? क्या कोई तरीका है कि मैं वास्तव में कोशिश करने के बिना इन सूचकांकों में से एक या अधिक को हटाने के प्रभाव का अनुमान लगा सकता हूं?
प्रत्येक इंडेक्स को लॉक करने की लागत के शीर्ष पर जोड़ें। लॉकिंग के उद्देश्य के लिए, प्रत्येक सूचकांक एक अलग संसाधन है। –
@KNoodles: वास्तव में, लॉकिंग अतिरिक्त ओवरहेड पेश करता है। (यद्यपि कई अच्छे अनाज वाले लॉक ऑपरेशन हो रहे हैं, लेकिन बाकी ऑपरेशन के लिए ओवरहेड से बचने के लिए उन्हें एक बड़े लॉक के लिए मजबूर किया जा सकता है।) –