ड्रॉप टेबल और ट्रंकट टेबल के बीच अंतर?


80

मेरे पास कुछ टेबल हैं जो मैं अपनी रिपोर्ट रोलअप के हिस्से के रूप में बनाता हूं। मुझे बाद में उनकी आवश्यकता नहीं है। किसी ने उन्हें तेज करने का उल्लेख किया क्योंकि यह तेज होगा।



यदि आप तालिका को छोटा करते हैं, तो MySQL हार्ड डिस्क के स्थान को खाली नहीं करता है। यदि आप अपना भंडारण वापस चाहते हैं, तो आपको टेबल को बिना काट-छाँट किए छोड़ देना चाहिए।
एमिलियो निकोलस

जवाबों:


102

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

अस्थायी रूप से डेटा को साफ करने के लिए ट्रंकट सामान्य रूप से अल्ट्रा-फास्ट है। यह भविष्य में उपयोग के लिए तालिका की संरचना को संरक्षित करता है।

यदि आप वास्तव में तालिका परिभाषाओं के साथ-साथ डेटा को निकालना चाहते हैं , तो बस टेबल को छोड़ दें।

अधिक जानकारी के लिए इस MSDN लेख को देखें


4
इसके अलावा, एक टेबल को काटकर पहचान के बीज को रीसेट किया जाता है। यह परीक्षण में मददगार हो सकता है क्योंकि आप अपनी तालिका को छोटा कर सकते हैं और डेटा डाल सकते हैं और जान सकते हैं कि हर बार पहचान के मान क्या होने वाले हैं। आप ऐसा कर सकते हैं यदि आपने तालिका में सभी डेटा हटा दिए हैं।
जिम

मिथक कि DROP और TRUNCATE TABLE गैर-लॉग हैं । बस एक अतिरिक्त दो सेंट।
जॉन केएन

87

ड्रॉप टेबल को हटा देता है।

TRUNCATE टेबल इसे खाली करता है, लेकिन भविष्य के डेटा के लिए इसकी संरचना को छोड़ देता है।


4
यार, इसके अलावा भी बहुत कुछ है जो आप जानते हैं;)
डेविड एल्ड्रिज

21
यह महत्वपूर्ण अंतर है।
सियजयोज

26

DROP और TRUNC अलग-अलग काम करते हैं:

ट्रिब्यूट टेबल

अलग-अलग पंक्ति विलोपन लॉग किए बिना तालिका से सभी पंक्तियों को निकालता है। TRUNCATE टेबल DELETE कथन के समान है, जिसमें कोई भी खंड नहीं है; हालाँकि, TRUNCATE TABLE तेज़ है और कम सिस्टम और ट्रांजेक्शन लॉग संसाधनों का उपयोग करता है।

ड्रॉप तालिका

उन तालिकाओं के लिए एक या अधिक तालिका परिभाषाएं और सभी डेटा, अनुक्रमणिका, ट्रिगर, बाधाएं और अनुमति विनिर्देश हटाता है।

जहां तक ​​गति का सवाल है अंतर छोटा होना चाहिए। और वैसे भी अगर आपको टेबल संरचना की बिल्कुल भी आवश्यकता नहीं है, तो निश्चित रूप से DROP का उपयोग करें।


20

मुझे लगता है कि आपका मतलब DELETE TABLE और TRUNCATE TABLE में अंतर है।

ड्रॉप तालिका

डेटाबेस से तालिका निकालें।

DELETE टेबल

बिना किसी शर्त के सभी पंक्तियों को हटा दें। यदि ट्रिगर और संदर्भ हैं तो यह प्रत्येक पंक्ति के लिए प्रक्रिया करेगा। इसके अलावा अगर कोई सूचकांक संशोधित किया जाएगा।

ट्रिब्यूट टेबल

प्रत्येक पंक्ति को लॉग किए बिना पंक्ति गणना शून्य और सेट करें। कि यह अन्य दोनों की तरह कई तेज है।


4
set the row count zeroयह वास्तव में प्रारंभिक पहचान बीज मूल्य पर वापस पहचान मूल्य पर सेट होता है।
फिलिप डी वोस

10

इनमें से कोई भी उत्तर इन दोनों परिचालनों के बारे में महत्वपूर्ण अंतर को इंगित नहीं करता है। ड्रॉप टेबल एक ऑपरेशन है जिसे वापस रोल किया जा सकता है। हालाँकि, ट्रंकट को वापस नहीं लाया जा सकता है ['TRUNCATE TABLE' को भी पीछे ले जाया जा सकता है]। इस तरह एक बहुत बड़ी मेज को गिराना बहुत महंगा हो सकता है यदि कई पंक्तियाँ हों, क्योंकि इन सभी को एक अस्थायी स्थान में दर्ज किया जाना चाहिए, यदि आप इसे वापस रोल करने का निर्णय लेते हैं।

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

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


2
यह पूरी तरह से सही नहीं है, TRUNCATE को BEGIN TRANSACTION, TRUNCATE TABLE, ROLLBACK सेंस में वापस रोल किया जा सकता है, न कि केवल "रिस्टोर ट्रांजैक्शन लॉग" की समझ में। यह पृष्ठों के निपटान को लॉग करता है।
मार्क सोउल

1
-1 DROPमूल रूप TRUNCATEसे सिस्टम टेबल से टेबल मेटाडेटा को हटाने के बाद मूल रूप से है। इस प्रश्न को यहाँ देखें
मार्टिन स्मिथ

5

ड्रॉप तालिका

DROP TABLE [table_name];

DROP कमांड का उपयोग डेटाबेस से एक टेबल को हटाने के लिए किया जाता है। यह एक DDL कमांड है। तालिका की सभी पंक्तियों, अनुक्रमित और विशेषाधिकारों को भी हटा दिया जाएगा। DROP ऑपरेशन को वापस नहीं लाया जा सकता है।

DELETE तालिका

DELETE FROM [table_name]
WHERE [condition];

DELETE FROM [table_name];

DELETE कमांड एक DML कमांड है। इसका उपयोग WHERE क्लॉज में निर्दिष्ट शर्त के आधार पर तालिका से सभी पंक्तियों या कुछ पंक्तियों को हटाने के लिए किया जा सकता है। इसे एक पंक्ति लॉक का उपयोग करके निष्पादित किया जाता है, तालिका में प्रत्येक पंक्ति को हटाने के लिए बंद किया जाता है। यह लेन-देन लॉग बनाए रखता है, इसलिए यह TRUNCATE की तुलना में धीमा है। DELETE परिचालनों को वापस लाया जा सकता है।

TRUNCATE तालिका

TRUNCATE TABLE [table_name];

TRUNCATE कमांड एक तालिका से सभी पंक्तियों को हटा देती है। यह प्रत्येक पंक्ति के विलोपन को लॉग नहीं करेगा, इसके बजाय यह तालिका के डेटा पृष्ठों के डीक्लोकेशन को लॉग करता है, जो इसे DELETE से अधिक तेज़ बनाता है। यह एक टेबल लॉक का उपयोग करके निष्पादित किया जाता है और सभी रिकॉर्ड को हटाने के लिए पूरी टेबल लॉक की जाती है। यह एक DDL कमांड है। TRUNCATE परिचालनों को वापस नहीं लाया जा सकता है।


यह सही नहीं है। Truncate और Drop को वापस रोल किया जा सकता है। रचनात्मक तालिका dbo.TestTruncate (ID INT) INSERT INTO dbo.TestTruncate (ID) VALUES (1) INSERT INTO dbo.TestTruncate (ID) VALUES (2) INSERT INTO dbo.TestTununate (ID) VALUES (3) BES .TestTruncate ड्रॉप तालिका dbo.TestTruncate ROLLBACK चुनें * dbo.TestTruncate ड्रॉप तालिका dbo.TestTruncate से
InbetweenWeekends

4

TRUNCATE टेबल आपके सभी पुराने अनुक्रमण और व्हाट्सएप को रखता है। ड्रॉप टेबल, जाहिर है, मेज से छुटकारा पाने और आपको इसे बाद में फिर से बनाने की आवश्यकता होगी।


3

ड्रॉप पूरी तरह से तालिका से छुटकारा दिलाता है, साथ ही परिभाषा को हटा देता है। ट्रंकट तालिका को खाली कर देता है लेकिन परिभाषा से छुटकारा नहीं मिलता है।


3

टेबल को खाली करने से टेबल खाली हो जाती है। तालिका को छोड़ने से यह पूरी तरह से हट जाता है। या तो एक तेज़ होगा, लेकिन इसे छोड़ने की संभावना तेज होगी (आपके डेटाबेस इंजन के आधार पर)।

यदि आपको इसकी आवश्यकता नहीं है, तो इसे छोड़ दें ताकि यह आपके स्कीमा को बंद न करे।


3

TRUNCATE TableA के बजाय DELETE TableA? एक आम गलतफहमी यह है कि वे एक ही काम करते हैं। ऐसा नहीं। वास्तव में, दोनों के बीच कई अंतर हैं।

DELETE प्रति पंक्ति के आधार पर एक लॉग ऑपरेशन है। इसका मतलब है कि प्रत्येक पंक्ति को हटाने से लॉग और भौतिक रूप से हटा दिया जाता है।

आप किसी भी पंक्ति को हटा सकते हैं जो एक बाधा का उल्लंघन नहीं करेगा, जबकि विदेशी कुंजी या किसी अन्य गर्भनिरोधक को छोड़कर।

TRUNCATE भी एक लॉग ऑपरेशन है, लेकिन एक अलग तरीके से। TRUNCATE उन डेटा पृष्ठों के डीललैशन को लॉग करता है जिसमें डेटा मौजूद है। डेटा पेजों के डीक्लोकेशन का अर्थ है कि आपकी डेटा पंक्तियाँ अभी भी डेटा पेजों में मौजूद हैं, लेकिन पुन: उपयोग के लिए extents को खाली के रूप में चिह्नित किया गया है। यह वही है जो TRUNCATE को DELETE पर प्रदर्शन करने के लिए एक तेज़ ऑपरेशन बनाता है।

आप किसी ऐसी तालिका को ट्रिब्यूट नहीं कर सकते हैं जिसमें कोई विदेशी कुंजी बाधा हो। आपको विरोधाभासों को दूर करना होगा, तालिका को हटा दें और फिर से विरोधाभासों को हटा दें।

TRUNCATE डिफ़ॉल्ट बीज मान के लिए किसी भी पहचान कॉलम को रीसेट करेगा।


"प्रत्येक पंक्ति को हटाने से लॉग और भौतिक रूप से हटा दिया जाता है" । क्या आपको यकीन है कि यह सही है? MSDN ब्लॉग का कहना है कि वे तुरंत पर्ज नहीं कर रहे हैं। इसी तरह से Postgres भी काम करता है।
ब्रैड कोच

2

truncate सभी पंक्तियों को हटा देता है, लेकिन तालिका ही नहीं, यह अनिवार्य रूप से जहाँ नहीं, लेकिन आमतौर पर तेजी के साथ हटाने के बराबर है।


यह तेजी से छोटा हो गया है क्योंकि यह लेन-देन लॉग नहीं करता है (मेरा मानना ​​है), इसलिए आप एक ट्रंकट से वापस नहीं लुढ़क सकते हैं जैसे आप हटा सकते हैं।
स्टीवन मुरावस्की

2

मेरे पास उपरोक्त कथनों में से एक के लिए एक सुधार है ... "ट्रंकट को वापस रोल नहीं किया जा सकता है"

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

आशा है कि यह मदद करता है, यहाँ कुछ और जानकारी है जो आपको उपयोगी मिलनी चाहिए ...

अधिक जानकारी के लिए कृपया निम्नलिखित लेख देखें: http://sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx

इसके अलावा, हटाने बनाम ट्रंकट पर अधिक जानकारी के लिए, इस लेख को देखें: http://www.sql-server-performance.com/faq/delete_truncate_difference_p1.aspx

धन्यवाद! जेफ


2

TRUNCATE टेबल कार्यात्मक रूप से DELETE स्टेटमेंट के समान है जिसमें कोई क्लॉज नहीं है: दोनों तालिका में सभी पंक्तियों को हटाते हैं। लेकिन TRUNCATE टेबल तेज है और DELETE की तुलना में कम प्रणाली और लेनदेन लॉग संसाधनों का उपयोग करता है।

DELETE कथन पंक्तियों को एक बार में हटाता है और प्रत्येक हटाए गए पंक्ति के लिए लेन-देन लॉग में एक प्रविष्टि दर्ज करता है। TRUNCATE तालिका तालिका के डेटा को संग्रहीत करने के लिए उपयोग किए जाने वाले डेटा पृष्ठों को हटाकर डेटा को हटा देती है, और लेनदेन लॉग में केवल पृष्ठ डीलॉक्लेशन दर्ज किए जाते हैं।

TRUNCATE टेबल एक तालिका से सभी पंक्तियों को हटा देता है, लेकिन तालिका संरचना और इसके स्तंभ, अवरोध, अनुक्रमित और इतने पर ही रहते हैं। नई पंक्तियों के लिए एक पहचान द्वारा उपयोग किया जाने वाला काउंटर स्तंभ के लिए बीज पर रीसेट होता है। यदि आप पहचान काउंटर को बनाए रखना चाहते हैं, तो इसके बजाय DELETE का उपयोग करें। यदि आप तालिका परिभाषा और इसके डेटा को हटाना चाहते हैं, तो DROP TABLE स्टेटमेंट का उपयोग करें।

आप एक फ़ोरवर्ड कुंजी बाधा द्वारा संदर्भित तालिका पर TRUNCATE टेबल का उपयोग नहीं कर सकते हैं; इसके बजाय, WHERE क्लॉज के बिना DELETE स्टेटमेंट का उपयोग करें। क्योंकि TRUNCATE टेबल लॉग नहीं है, इसलिए यह ट्रिगर को सक्रिय नहीं कर सकता है।

अनुक्रमित तालिका का उपयोग अनुक्रमित दृश्य में भाग लेने वाले तालिकाओं पर नहीं किया जा सकता है।

से http://msdn.microsoft.com/en-us/library/aa260621(SQL.80).aspx


2

SQL मानक में, DROP तालिका तालिका को हटा देती है और तालिका स्कीमा - TRUNCATE सभी पंक्तियों को हटा देती है।


1

यहाँ उत्तर प्रश्न से मेल खाते हैं, लेकिन मैं उस प्रश्न का उत्तर देने जा रहा हूँ जो आपने नहीं पूछा था। "क्या मुझे ट्रंकेट या डिलीट का उपयोग करना चाहिए?" यदि आप किसी तालिका से सभी पंक्तियों को निकाल रहे हैं, तो आप आमतौर पर अलग करना चाहते हैं, क्योंकि यह बहुत तेज़ है। यह ज्यादा तेज क्यों है? कम से कम ओरेकल के मामले में, यह उच्च पानी के निशान को हल करता है । यह मूल रूप से डेटा की एक डीफ्रेंसिंग है और डीबी को किसी और चीज के लिए इसका पुन: उपयोग करने की अनुमति देता है।


1

DELETE VS TRUNCATE

  1. DELETEबयान पंक्तियाँ एक समय में एक दूर करता है और प्रत्येक को नष्ट कर दिया पंक्ति के लिए लेन-देन लॉग में एक प्रविष्टि रिकॉर्ड करता है।TRUNCATE TABLEतालिका डेटा को संग्रहीत करने के लिए उपयोग किए जाने वाले डेटा पृष्ठों को हटाकर डेटा को निकालता है और लेनदेन लॉग में केवल पृष्ठ डीलक्लोशंस रिकॉर्ड करता है
  2. हम WHEREक्लॉज का उपयोग कर सकते हैं , DELETEलेकिन TRUNCATEआप इसका उपयोग नहीं कर सकते
  3. जब DELETEकथन को एक पंक्ति लॉक का उपयोग करके निष्पादित किया जाता है, तो तालिका में प्रत्येक पंक्ति को हटाने के लिए बंद कर दिया जाता है। TRUNCATE TABLEहमेशा तालिका और पृष्ठ को लॉक करता है लेकिन प्रत्येक पंक्ति को नहीं
  4. किसी DELETEकथन के निष्पादित होने के बाद , तालिका में अभी भी खाली पृष्ठ हो सकते हैं। यदि डिलीट ऑपरेशन टेबल लॉक का उपयोग नहीं करता है, तो टेबल (हीप) में कई खाली पृष्ठ होंगे। अनुक्रमित के लिए, डिलीट ऑपरेशन खाली पन्नों को पीछे छोड़ सकता है, हालांकि इन
    पृष्ठों को पृष्ठभूमि सफाई प्रक्रिया द्वारा जल्दी से निपटाया जाएगा
  5. TRUNCATE TABLE किसी तालिका से सभी पंक्तियों को निकालता है, लेकिन तालिका संरचना और उसके स्तंभ, बाधाएं, अनुक्रमणिका, और इसी तरह शेष हैं
  6. DELETEस्टेटमेंट RESEEDकॉलम की पहचान नहीं करता है, लेकिन कॉलम का TRUNCATEविवरण RESEEDSदेता IDENTITYहै
  7. आप TRUNCATE TABLEतालिकाओं पर उपयोग नहीं कर सकते हैं कि:
    1. एक FOREIGN KEYबाधा द्वारा संदर्भित हैं । (आप एक ऐसी मेज को काट सकते हैं जिसमें एक विदेशी कुंजी है जो खुद को संदर्भित करता है।)
    2. अनुक्रमित दृश्य में भाग लें।
    3. लेन-देन प्रतिकृति या मर्ज प्रतिकृति का उपयोग करके प्रकाशित किए जाते हैं
  8. TRUNCATE TABLE ट्रिगर सक्रिय नहीं कर सकता क्योंकि ऑपरेशन अलग-अलग पंक्ति विलोपन को लॉग नहीं करता है

1

ड्रॉप ड्रॉप पूरे टेबल और इसकी सारी संरचना

truncate तालिका से सभी पंक्तियों को हटा दें यह हटाने से अलग है कि यह पंक्तियों के अनुक्रमित को भी हटा देती है


1

स्टेटमेंट डिलीट करें

स्टेटमेंट डिलीट टेबल टेबल को डिलीट करें और टेबल से पंक्तियों की संख्या को डिलीट कर दें। इस स्टेटमेंट में, हम टेबल से डिलीट हुए डेटा के क्लॉज का उपयोग करते हैं

  • डिलीट स्टेटमेंट ट्रुनेट स्टेटमेंट की तुलना में धीमा है क्योंकि यह एक-एक करके रिकॉर्ड्स को डिलीट करता है

ट्रंकसेट स्टेटमेंट

ट्रंकेट कथन तालिका से सभी पंक्तियों को हटा दिया गया या हटा दिया गया।

  • यह डिलीट स्टेटमेंट से तेज है क्योंकि इसने टेबल से सारे रिकॉर्ड डिलीट कर दिए हैं
  • ट्रंकेट कथन तालिका से हटाए गए पंक्तियों की संख्या को वापस नहीं करता है

ड्रॉप स्टेटमेंट

ड्रॉप स्टेटमेंट ने सभी अभिलेखों के साथ-साथ तालिका की संरचना को भी हटा दिया


0

हटाएँ

DELETE कमांड का उपयोग टेबल से पंक्तियों को हटाने के लिए किया जाता है। जहां कुछ पंक्तियों को हटाने के लिए एक क्लॉज का उपयोग किया जा सकता है। यदि कोई शर्त निर्दिष्ट नहीं की जाती है, तो सभी पंक्तियों को हटा दिया जाएगा। DELETE ऑपरेशन करने के बाद आपको परिवर्तन को स्थायी बनाने या इसे पूर्ववत करने के लिए लेन-देन को कम या कम करना होगा।

काट-छांट

TRUNCATE एक तालिका से सभी पंक्तियों को निकालता है। ऑपरेशन वापस नहीं किया जा सकता ... इस प्रकार, TRUCATE तेज़ है और DELETE के रूप में अधिक पूर्ववत स्थान का उपयोग नहीं करता है।

प्रेषक: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

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