मेरे पास कुछ टेबल हैं जो मैं अपनी रिपोर्ट रोलअप के हिस्से के रूप में बनाता हूं। मुझे बाद में उनकी आवश्यकता नहीं है। किसी ने उन्हें तेज करने का उल्लेख किया क्योंकि यह तेज होगा।
मेरे पास कुछ टेबल हैं जो मैं अपनी रिपोर्ट रोलअप के हिस्से के रूप में बनाता हूं। मुझे बाद में उनकी आवश्यकता नहीं है। किसी ने उन्हें तेज करने का उल्लेख किया क्योंकि यह तेज होगा।
जवाबों:
तालिका से रिकॉर्ड हटाना हर विलोपन को लॉग करता है और हटाए गए रिकॉर्ड के लिए हटाए गए ट्रिगर्स को निष्पादित करता है। Truncate एक अधिक शक्तिशाली कमांड है जो प्रत्येक पंक्ति को लॉग किए बिना तालिका खाली करता है। SQL सर्वर आपको प्रत्येक पंक्ति पर विदेशी कुंजियों की जांच करने की आवश्यकता के कारण, इसे संदर्भित करने वाली विदेशी कुंजियों के साथ एक तालिका को रौंदने से रोकता है।
अस्थायी रूप से डेटा को साफ करने के लिए ट्रंकट सामान्य रूप से अल्ट्रा-फास्ट है। यह भविष्य में उपयोग के लिए तालिका की संरचना को संरक्षित करता है।
यदि आप वास्तव में तालिका परिभाषाओं के साथ-साथ डेटा को निकालना चाहते हैं , तो बस टेबल को छोड़ दें।
अधिक जानकारी के लिए इस MSDN लेख को देखें
ड्रॉप टेबल को हटा देता है।
TRUNCATE टेबल इसे खाली करता है, लेकिन भविष्य के डेटा के लिए इसकी संरचना को छोड़ देता है।
DROP और TRUNC अलग-अलग काम करते हैं:
ट्रिब्यूट टेबल
अलग-अलग पंक्ति विलोपन लॉग किए बिना तालिका से सभी पंक्तियों को निकालता है। TRUNCATE टेबल DELETE कथन के समान है, जिसमें कोई भी खंड नहीं है; हालाँकि, TRUNCATE TABLE तेज़ है और कम सिस्टम और ट्रांजेक्शन लॉग संसाधनों का उपयोग करता है।
ड्रॉप तालिका
उन तालिकाओं के लिए एक या अधिक तालिका परिभाषाएं और सभी डेटा, अनुक्रमणिका, ट्रिगर, बाधाएं और अनुमति विनिर्देश हटाता है।
जहां तक गति का सवाल है अंतर छोटा होना चाहिए। और वैसे भी अगर आपको टेबल संरचना की बिल्कुल भी आवश्यकता नहीं है, तो निश्चित रूप से DROP का उपयोग करें।
मुझे लगता है कि आपका मतलब DELETE TABLE और TRUNCATE TABLE में अंतर है।
ड्रॉप तालिका
डेटाबेस से तालिका निकालें।
DELETE टेबल
बिना किसी शर्त के सभी पंक्तियों को हटा दें। यदि ट्रिगर और संदर्भ हैं तो यह प्रत्येक पंक्ति के लिए प्रक्रिया करेगा। इसके अलावा अगर कोई सूचकांक संशोधित किया जाएगा।
ट्रिब्यूट टेबल
प्रत्येक पंक्ति को लॉग किए बिना पंक्ति गणना शून्य और सेट करें। कि यह अन्य दोनों की तरह कई तेज है।
set the row count zeroयह वास्तव में प्रारंभिक पहचान बीज मूल्य पर वापस पहचान मूल्य पर सेट होता है।
इनमें से कोई भी उत्तर इन दोनों परिचालनों के बारे में महत्वपूर्ण अंतर को इंगित नहीं करता है। ड्रॉप टेबल एक ऑपरेशन है जिसे वापस रोल किया जा सकता है। हालाँकि, ट्रंकट को वापस नहीं लाया जा सकता है ['TRUNCATE TABLE' को भी पीछे ले जाया जा सकता है]। इस तरह एक बहुत बड़ी मेज को गिराना बहुत महंगा हो सकता है यदि कई पंक्तियाँ हों, क्योंकि इन सभी को एक अस्थायी स्थान में दर्ज किया जाना चाहिए, यदि आप इसे वापस रोल करने का निर्णय लेते हैं।
आमतौर पर, यदि मैं एक बड़ी तालिका से छुटकारा चाहता हूं, तो मैं इसे छोटा कर दूंगा, फिर इसे छोड़ दूंगा। इस तरह से डेटा को रिकॉर्ड के बिना nixed किया जाएगा, और तालिका को गिराया जा सकता है, और यह ड्रॉप बहुत सस्ती होगी क्योंकि किसी भी डेटा को रिकॉर्ड करने की आवश्यकता नहीं है।
यह इंगित करना महत्वपूर्ण है कि ट्रंकैट सिर्फ डेटा को हटाता है, तालिका को छोड़ रहा है, जबकि ड्रॉप इच्छा, वास्तव में, डेटा और तालिका को स्वयं हटा देगा। (यह मानते हुए कि विदेशी कुंजी इस तरह की कार्रवाई को रोक नहीं सकती है)
DROPमूल रूप TRUNCATEसे सिस्टम टेबल से टेबल मेटाडेटा को हटाने के बाद मूल रूप से है। इस प्रश्न को यहाँ देखें
DROP TABLE [table_name];
DROP कमांड का उपयोग डेटाबेस से एक टेबल को हटाने के लिए किया जाता है। यह एक DDL कमांड है। तालिका की सभी पंक्तियों, अनुक्रमित और विशेषाधिकारों को भी हटा दिया जाएगा। DROP ऑपरेशन को वापस नहीं लाया जा सकता है।
DELETE FROM [table_name]
WHERE [condition];
DELETE FROM [table_name];
DELETE कमांड एक DML कमांड है। इसका उपयोग WHERE क्लॉज में निर्दिष्ट शर्त के आधार पर तालिका से सभी पंक्तियों या कुछ पंक्तियों को हटाने के लिए किया जा सकता है। इसे एक पंक्ति लॉक का उपयोग करके निष्पादित किया जाता है, तालिका में प्रत्येक पंक्ति को हटाने के लिए बंद किया जाता है। यह लेन-देन लॉग बनाए रखता है, इसलिए यह TRUNCATE की तुलना में धीमा है। DELETE परिचालनों को वापस लाया जा सकता है।
TRUNCATE TABLE [table_name];
TRUNCATE कमांड एक तालिका से सभी पंक्तियों को हटा देती है। यह प्रत्येक पंक्ति के विलोपन को लॉग नहीं करेगा, इसके बजाय यह तालिका के डेटा पृष्ठों के डीक्लोकेशन को लॉग करता है, जो इसे DELETE से अधिक तेज़ बनाता है। यह एक टेबल लॉक का उपयोग करके निष्पादित किया जाता है और सभी रिकॉर्ड को हटाने के लिए पूरी टेबल लॉक की जाती है। यह एक DDL कमांड है। TRUNCATE परिचालनों को वापस नहीं लाया जा सकता है।
TRUNCATE टेबल आपके सभी पुराने अनुक्रमण और व्हाट्सएप को रखता है। ड्रॉप टेबल, जाहिर है, मेज से छुटकारा पाने और आपको इसे बाद में फिर से बनाने की आवश्यकता होगी।
TRUNCATE TableA के बजाय DELETE TableA? एक आम गलतफहमी यह है कि वे एक ही काम करते हैं। ऐसा नहीं। वास्तव में, दोनों के बीच कई अंतर हैं।
DELETE प्रति पंक्ति के आधार पर एक लॉग ऑपरेशन है। इसका मतलब है कि प्रत्येक पंक्ति को हटाने से लॉग और भौतिक रूप से हटा दिया जाता है।
आप किसी भी पंक्ति को हटा सकते हैं जो एक बाधा का उल्लंघन नहीं करेगा, जबकि विदेशी कुंजी या किसी अन्य गर्भनिरोधक को छोड़कर।
TRUNCATE भी एक लॉग ऑपरेशन है, लेकिन एक अलग तरीके से। TRUNCATE उन डेटा पृष्ठों के डीललैशन को लॉग करता है जिसमें डेटा मौजूद है। डेटा पेजों के डीक्लोकेशन का अर्थ है कि आपकी डेटा पंक्तियाँ अभी भी डेटा पेजों में मौजूद हैं, लेकिन पुन: उपयोग के लिए extents को खाली के रूप में चिह्नित किया गया है। यह वही है जो TRUNCATE को DELETE पर प्रदर्शन करने के लिए एक तेज़ ऑपरेशन बनाता है।
आप किसी ऐसी तालिका को ट्रिब्यूट नहीं कर सकते हैं जिसमें कोई विदेशी कुंजी बाधा हो। आपको विरोधाभासों को दूर करना होगा, तालिका को हटा दें और फिर से विरोधाभासों को हटा दें।
TRUNCATE डिफ़ॉल्ट बीज मान के लिए किसी भी पहचान कॉलम को रीसेट करेगा।
truncate सभी पंक्तियों को हटा देता है, लेकिन तालिका ही नहीं, यह अनिवार्य रूप से जहाँ नहीं, लेकिन आमतौर पर तेजी के साथ हटाने के बराबर है।
मेरे पास उपरोक्त कथनों में से एक के लिए एक सुधार है ... "ट्रंकट को वापस रोल नहीं किया जा सकता है"
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
धन्यवाद! जेफ
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
यहाँ उत्तर प्रश्न से मेल खाते हैं, लेकिन मैं उस प्रश्न का उत्तर देने जा रहा हूँ जो आपने नहीं पूछा था। "क्या मुझे ट्रंकेट या डिलीट का उपयोग करना चाहिए?" यदि आप किसी तालिका से सभी पंक्तियों को निकाल रहे हैं, तो आप आमतौर पर अलग करना चाहते हैं, क्योंकि यह बहुत तेज़ है। यह ज्यादा तेज क्यों है? कम से कम ओरेकल के मामले में, यह उच्च पानी के निशान को हल करता है । यह मूल रूप से डेटा की एक डीफ्रेंसिंग है और डीबी को किसी और चीज के लिए इसका पुन: उपयोग करने की अनुमति देता है।
DELETEबयान पंक्तियाँ एक समय में एक दूर करता है और प्रत्येक को नष्ट कर दिया पंक्ति के लिए लेन-देन लॉग में एक प्रविष्टि रिकॉर्ड करता है।TRUNCATE TABLEतालिका डेटा को संग्रहीत करने के लिए उपयोग किए जाने वाले डेटा पृष्ठों को हटाकर डेटा को निकालता है और लेनदेन लॉग में केवल पृष्ठ डीलक्लोशंस रिकॉर्ड करता हैWHEREक्लॉज का उपयोग कर सकते हैं , DELETEलेकिन TRUNCATEआप इसका उपयोग नहीं कर सकतेDELETEकथन को एक पंक्ति लॉक का उपयोग करके निष्पादित किया जाता है, तो तालिका में प्रत्येक पंक्ति को हटाने के लिए बंद कर दिया जाता है। TRUNCATE TABLEहमेशा तालिका और पृष्ठ को लॉक करता है लेकिन प्रत्येक पंक्ति को नहींDELETEकथन के निष्पादित होने के बाद , तालिका में अभी भी खाली पृष्ठ हो सकते हैं। यदि डिलीट ऑपरेशन टेबल लॉक का उपयोग नहीं करता है, तो टेबल (हीप) में कई खाली पृष्ठ होंगे। अनुक्रमित के लिए, डिलीट ऑपरेशन खाली पन्नों को पीछे छोड़ सकता है, हालांकि इन TRUNCATE TABLE किसी तालिका से सभी पंक्तियों को निकालता है, लेकिन तालिका संरचना और उसके स्तंभ, बाधाएं, अनुक्रमणिका, और इसी तरह शेष हैंDELETEस्टेटमेंट RESEEDकॉलम की पहचान नहीं करता है, लेकिन कॉलम का TRUNCATEविवरण RESEEDSदेता
IDENTITYहैTRUNCATE TABLEतालिकाओं पर उपयोग नहीं कर सकते हैं कि:
FOREIGN KEYबाधा द्वारा संदर्भित हैं । (आप एक ऐसी मेज को काट सकते हैं जिसमें एक विदेशी कुंजी है जो खुद को संदर्भित करता है।)TRUNCATE TABLE ट्रिगर सक्रिय नहीं कर सकता क्योंकि ऑपरेशन अलग-अलग पंक्ति विलोपन को लॉग नहीं करता हैस्टेटमेंट डिलीट करें
स्टेटमेंट डिलीट टेबल टेबल को डिलीट करें और टेबल से पंक्तियों की संख्या को डिलीट कर दें। इस स्टेटमेंट में, हम टेबल से डिलीट हुए डेटा के क्लॉज का उपयोग करते हैं
ट्रंकसेट स्टेटमेंट
ट्रंकेट कथन तालिका से सभी पंक्तियों को हटा दिया गया या हटा दिया गया।
ड्रॉप स्टेटमेंट
ड्रॉप स्टेटमेंट ने सभी अभिलेखों के साथ-साथ तालिका की संरचना को भी हटा दिया
हटाएँ
DELETE कमांड का उपयोग टेबल से पंक्तियों को हटाने के लिए किया जाता है। जहां कुछ पंक्तियों को हटाने के लिए एक क्लॉज का उपयोग किया जा सकता है। यदि कोई शर्त निर्दिष्ट नहीं की जाती है, तो सभी पंक्तियों को हटा दिया जाएगा। DELETE ऑपरेशन करने के बाद आपको परिवर्तन को स्थायी बनाने या इसे पूर्ववत करने के लिए लेन-देन को कम या कम करना होगा।
काट-छांट
TRUNCATE एक तालिका से सभी पंक्तियों को निकालता है। ऑपरेशन वापस नहीं किया जा सकता ... इस प्रकार, TRUCATE तेज़ है और DELETE के रूप में अधिक पूर्ववत स्थान का उपयोग नहीं करता है।
प्रेषक: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands