DELETE बनाम TRUNCATE


35

मैं DELETEऔर TRUNCATEआज्ञाओं के बीच के अंतर पर अधिक से अधिक समझ पाने की कोशिश कर रहा हूं । इंटर्नल की मेरी समझ कुछ इस प्रकार है:

DELETE-> डेटाबेस इंजन प्रासंगिक डेटा पेजों और उन सभी इंडेक्स पेजों से पंक्ति को ढूंढता और हटाता है जहां पंक्ति दर्ज की गई है। इस प्रकार, जितना अधिक डिलीट होता है उतने लंबे समय तक इंडेक्स होता है।

TRUNCATE -> बस टेबल के सभी डेटा पेजों को हटा देता है, जिससे मेज की सामग्री को हटाने के लिए यह एक अधिक कुशल विकल्प बन जाता है।

उपरोक्त मान लेना सही है (कृपया मुझे ठीक करें यदि नहीं):

  1. विभिन्न रिकवरी मोड प्रत्येक कथन को कैसे प्रभावित करते हैं? अगर इसका कोई असर होता है
  2. हटाते समय, सभी अनुक्रमित स्कैन किए जाते हैं या केवल जहां पंक्ति होती है? मुझे लगता है कि सभी अनुक्रमित स्कैन किए गए हैं (और तलाश नहीं की गई है?)
  3. आदेशों को कैसे दोहराया जाता है? क्या SQL कमांड भेजा गया है और प्रत्येक ग्राहक पर कार्रवाई की गई है? या MSSQL उस से थोड़ा अधिक बुद्धिमान है?

2
इस सवाल के जवाब में कुछ संबंधित जानकारी है DELETEऔर इस सवालTRUNCATE के जवाब में तुरंत ए की उपयोगिता है । आप इस उत्तर में वर्णित तकनीक का उपयोग करके दोनों आदेशों के प्रभावों का अध्ययन करने के लिए लॉग इन के आसपास भी खुदाई कर सकते हैं । TRUNCATEDROP
निक चामास

1
यह उत्तर DELETE और TRUNCATE परिचालनों के आंतरिक भाग को दर्शाता है। साथ ही सवाल एक विशेष स्थिति को दर्शाता है जहां TRUNCATE बेहतर काम करता है।
孔夫子

5
@idstam TRUNCATEको बैक किया जा सकता है। निक ने कहा कि इस सवाल के जवाब में वह जुड़ा हुआ है
मार्क स्टोरी-स्मिथ

ट्रंकट को "परिवर्तन तालिका" अनुमति की आवश्यकता होती है (इस अर्थ में कि ट्रंकेट को हटाने के लिए प्लग में है)।
क्रोकेक

जवाबों:


58

DELETE -> डेटाबेस इंजन प्रासंगिक डेटा पृष्ठों और पंक्ति को दर्ज करने वाले सभी इंडेक्स पृष्ठों से पंक्ति को ढूंढता है और हटाता है। इस प्रकार, जितना अधिक डिलीट होता है उतने लंबे समय तक इंडेक्स होता है।

हां, हालांकि यहां दो विकल्प हैं। बेस टेबल डिलीट करने वाले एक ही ऑपरेटर द्वारा गैर-अनुक्रमित अनुक्रमित पंक्ति-दर-पंक्ति से पंक्तियों को हटाया जा सकता है। इसे एक संकीर्ण (या प्रति-पंक्ति) अद्यतन योजना के रूप में जाना जाता है:

प्रति पंक्ति विलोपन

या, गैर-अनुक्रमणिका हटाए जाने के लिए अलग-अलग ऑपरेटरों द्वारा प्रदर्शन किया जा सकता है, एक गैर-अनुक्रमित सूचकांक। इस मामले में (एक विस्तृत, या प्रति-इंडेक्स अपडेट योजना के रूप में जाना जाता है) क्रियाओं का पूरा सेट एक इंडेक्स के अनुसार एक बार रिप्लेसमेंट होने से पहले एक वर्कटेबुल (उत्सुक स्पूल) में संग्रहित होता है, अक्सर एक अनुक्रमिक को प्रोत्साहित करने के लिए विशेष रूप से गैर-अनुक्रमित इंडेक्स की कुंजियों द्वारा स्पष्ट रूप से सॉर्ट किया जाता है। पहुंच पैटर्न।

प्रति सूचकांक विलोपन

TRUNCATE -> किसी तालिका की सामग्री को हटाने के लिए इसे अधिक कुशल विकल्प बनाते हुए सभी तालिका के डेटा पृष्ठों को हटा देता है।

हाँ। TRUNCATE TABLEकई कारणों से अधिक कुशल है:

  1. कम ताले की जरूरत हो सकती है। ट्रंकेशन को आमतौर पर टेबल स्तर पर केवल एक स्कीमा संशोधन लॉक की आवश्यकता होती है (और प्रत्येक सीमा पर अनन्य ताले )। विलोपन कम (पंक्ति या पृष्ठ) ग्रैन्युलैरिटी के साथ-साथ किसी भी पृष्ठ पर किए गए अनन्य लॉक पर ताले को हटा सकता है।
  2. केवल ट्रंकेशन गारंटी देता है कि सभी पृष्ठों को ढेर तालिका से हटा दिया गया है। यदि कोई अनन्य तालिका लॉक संकेत निर्दिष्ट है (उदाहरण के लिए यदि पंक्ति-वर्जन आइसोलेशन स्तर डेटाबेस के लिए सक्षम किया गया है) तो भी डिलेयन खाली पृष्ठों को ढेर में छोड़ सकता है।
  3. ट्रंकेशन हमेशा न्यूनतम रूप से लॉग किया जाता है (उपयोग में पुनर्प्राप्ति मॉडल की परवाह किए बिना)। लेन-देन लॉग में केवल पृष्ठ सौदा परिचालन दर्ज किए जाते हैं।
  4. यदि ऑब्जेक्ट 128 extents या आकार में बड़ा है तो ट्रंकेशन आस्थगित ड्रॉप का उपयोग कर सकता है। आस्थगित ड्रॉप का अर्थ है वास्तविक डीललोकेशन कार्य को पृष्ठभूमि सर्वर थ्रेड द्वारा अतुल्यकालिक रूप से किया जाता है।

विभिन्न रिकवरी मोड प्रत्येक कथन को कैसे प्रभावित करते हैं? क्या इसका कोई असर है?

हटाए जाने को हमेशा पूरी तरह से लॉग किया जाता है (डिलीट की गई प्रत्येक पंक्ति को ट्रांजेक्शन लॉग में दर्ज किया जाता है)। लॉग रिकॉर्ड की सामग्री में कुछ छोटे अंतर हैं यदि रिकवरी मॉडल इसके अलावा है FULL, लेकिन यह अभी भी तकनीकी रूप से पूर्ण लॉगिंग है।

हटाते समय, सभी अनुक्रमित स्कैन किए जाते हैं या केवल जहां पंक्ति होती है? मुझे लगता है कि सभी अनुक्रमित स्कैन किए गए हैं (और तलाश नहीं की गई है?)

किसी अनुक्रमणिका में एक पंक्ति को हटाना (पहले दिखाए गए संकीर्ण या विस्तृत अपडेट योजनाओं का उपयोग करके) हमेशा कुंजी (एक खोज) द्वारा पहुंच है। हटाए गए प्रत्येक पंक्ति के लिए पूरे सूचकांक को स्कैन करना बहुत ही अयोग्य होगा। आइए पहले दिखाए गए प्रति-इंडेक्स अपडेट प्लान को फिर से देखें:

विस्तृत योजना २

निष्पादन योजनाएं मांग-संचालित पाइपलाइन हैं: माता-पिता ऑपरेटर (बाएं से) बाल ऑपरेटरों को उनसे एक समय में एक पंक्ति का अनुरोध करके काम करने के लिए प्रेरित करते हैं। सॉर्ट ऑपरेटर अवरुद्ध कर रहे हैं (उन्हें पहली छँटाई पंक्ति का उत्पादन करने से पहले अपने पूरे इनपुट का उपभोग करना चाहिए), लेकिन वे अभी भी अपने माता-पिता (इंडेक्स डिलीट) द्वारा उस पहली पंक्ति का अनुरोध करके संचालित किए जा रहे हैं। इंडेक्स डिलीट एक समय में एक पंक्ति को पूर्ण सॉर्ट से खींचता है , प्रत्येक पंक्ति के लिए लक्ष्य गैर-अनुक्रमित इंडेक्स को अपडेट करता है।

एक विस्तृत अपडेट योजना में, आप अक्सर बेस टेबल अपडेट ऑपरेटर द्वारा पंक्ति स्ट्रीम में जोड़े जा रहे कॉलम देखेंगे। इस स्थिति में, Clustered Index Delete धारा में गैर-अनुक्रमित अनुक्रमणिका कुंजी कॉलम जोड़ता है। यह डेटा भंडारण इंजन द्वारा गैर-अनुक्रमित सूचकांक से हटाने के लिए पंक्ति का पता लगाने के लिए आवश्यक है:

आउटपुट सूची विस्तार

आदेशों को कैसे दोहराया जाता है? क्या SQL कमांड भेजा गया है और प्रत्येक ग्राहक पर कार्रवाई की गई है? या SQL सर्वर उससे थोड़ा अधिक बुद्धिमान है?

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

संबंधित पढ़ना: डेटा को बदलने वाले टी-एसक्यूएल प्रश्नों का अनुकूलन

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.