सबसे पहले, चयन अद्यतन के बाद लगभग हमेशा संगामिति के तहत गलत है। जब तक चीजें SERIALIZABLE अलगाव स्तर के तहत नहीं चलती हैं, तब तक कोई गारंटी नहीं है कि पंक्तियां के बीच चयन और अद्यतन के बीच नहीं बदलती हैं।
दूसरा, उन मामलों के लिए जब पंक्तियों को अद्यतन करने के लिए हैं, तो चयन + अद्यतन की लागत केवल एक अद्यतन से अधिक परिभाषा है।
और आखिरी, मामले के लिए जब वहाँ उन्हें अद्यतन द्वारा पता लगाने की लागत को अद्यतन करने के पंक्तियों नहीं हैं अक्सर उन्हें चयन से पता लगाने की लागत के रूप में ही है, तो आप कुछ भी हासिल नहीं किया। मैं अक्सर 'नहीं' कहता हूं, 'हमेशा' नहीं, क्योंकि क्वेरी ऑप्टिमाइज़र अद्यतन बनाम चयन के लिए अलग-अलग रणनीतियों पर विचार कर सकता है और पढ़ने के लिए स्कैन की तुलना में अद्यतन के लिए स्कैन अलग लॉकिंग (समवर्ती) नियमों के तहत होता है।
क्या समझ सकता है कि एक बहुत ही सस्ता चयन है जो महंगी अद्यतन से बच सकता है, भले ही 100% सटीक न हो। चयन और अद्यतन के बीच की स्थिति जंगली रूप से भिन्न हो सकती है जब तक आपको कोई झूठी नकारात्मक न हो (चयन करें कि कोई पंक्ति नहीं होनी चाहिए लेकिन अद्यतन को पंक्ति मिली होगी, इसे चलाया गया था) और झूठी संख्या सकारात्मक कम है (चयन कहता है कि पंक्तियां हैं, लेकिन अधिक सटीक/महंगा अद्यतन चेक वास्तव में कोई नहीं ढूंढता है)।
आखिरकार यह अनुकूलन की समस्या है और सभी अनुकूलन प्रश्न मापने से शुरू होते हैं। पहले महंगा अद्यतन का पता लगाएं और फिर संशोधित करना प्रारंभ करें।
स्रोत
2012-05-31 13:26:31
यह इस बात पर निर्भर करता है कि आपका 'WHERE' क्लॉज कितना जटिल है। 'अद्यतन' कथन को पहले यह पता लगाना होगा कि कौन सी पंक्तियों को अपडेट करना है - या कोई भी नहीं। यदि आप उस तालिका पर उचित सूचकांक की कमी कर रहे हैं, तो इसमें टेबल स्कैन शामिल हो सकते हैं। हमेशा के रूप में: ** परीक्षण ** यह और देखें कि यह कितना बुरा है। निस्संदेह उन पंक्तियों को निर्धारित करना बेहतर होगा जिन्हें वास्तव में अद्यतन करने की आवश्यकता है - और फिर उनको अपडेट करना। लेकिन उन पंक्तियों को निर्धारित करने के लिए कितना प्रयास है? –
प्रयास तालिका चर के साथ गड़बड़ करना शामिल होगा, न केवल एक या दो ... मैं एक स्क्रिप्ट में सभी को एक साथ चलने और विभिन्न तालिकाओं को अपडेट करने के बारे में 20 अपडेट स्टेटमेंट्स के बारे में बात कर रहा हूं। विकास प्रयासों के संदर्भ में केवल अद्यतन बयानों को विकसित करने से कहीं अधिक होगा। अद्यतन में कहां से खंडों के बारे में, उनमें से अधिकतर में एक या दो आंतरिक होते हैं जिनमें सबसे अधिक सरल और सरल "शून्य है" या "<> 0" खंड होते हैं। –