मैं लगातार देखता हूं कि लोग कहते हैं कि इंडेक्स धीमा हो जाता है update
, delete
और insert
। यह एक कंबल बयान के रूप में प्रयोग किया जाता है, जैसे कि यह एक पूर्ण है।
प्रदर्शन में सुधार करने के लिए अपने डेटाबेस को ट्यून करते समय, मैं इस स्थिति में आता रहता हूं जो कि मेरे लिए तार्किक रूप से उस नियम का खंडन करता प्रतीत होता है, और कहीं भी मैं किसी को भी किसी भी तरह से कह या समझा नहीं सकता।
SQL सर्वर में, और मेरा मानना है कि अधिकांश अन्य DBMS निर्धारित करते हैं, आपके सूचकांक आपके द्वारा निर्दिष्ट विशिष्ट स्तंभों के आधार पर बनाए जाते हैं। आवेषण और विलोपन हमेशा एक पूरी पंक्ति को प्रभावित करेंगे, इसलिए ऐसा कोई तरीका नहीं है जिससे वे सूचकांक को प्रभावित नहीं करेंगे, लेकिन अपडेट कुछ अधिक अद्वितीय लगते हैं, वे विशेष रूप से केवल कुछ स्तंभों को प्रभावित कर सकते हैं।
यदि मेरे पास ऐसे कॉलम हैं जो किसी भी इंडेक्स पर शामिल नहीं हैं और मैं उन्हें अपडेट करता हूं, तो क्या वे सिर्फ इसलिए धीमा हो जाते हैं क्योंकि मेरे पास उस टेबल के अन्य कॉलम पर एक इंडेक्स है?
एक उदाहरण के रूप में, मेरी User
तालिका में कहें कि मेरे पास एक या दो इंडेक्स हैं, प्राथमिक कुंजी जो एक पहचान / ऑटो वृद्धि कॉलम है, और संभवतः कुछ विदेशी कुंजी कॉलम पर एक और है।
यदि मैं सीधे उस पर अनुक्रमणिका के बिना एक स्तंभ अपडेट करता हूं, जैसे कि उनका फ़ोन नंबर या पता, क्या यह अद्यतन धीमा है क्योंकि मेरे पास किसी भी स्थिति में अन्य स्तंभों पर इस तालिका पर अनुक्रमित है? जो कॉलम मैं अपडेट कर रहा हूं, वे इंडेक्स में नहीं हैं, इसलिए तार्किक रूप से, इंडेक्स को अपडेट नहीं किया जाना चाहिए, क्या उन्हें नहीं करना चाहिए? अगर कुछ भी हो, तो मुझे लगता है कि अगर मैं WHERE क्लॉज में अनुक्रमित का उपयोग करता हूं तो उन्हें ऊपर उठा दिया जाता है।
so there is no way they will not affect the index
सिवाय फ़िल्टर्ड इंडेक्स के ...