Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर:DELETE बनाम TRUNCATE

T-SQL दो कीवर्ड प्रदान करता है जो आपको किसी तालिका से डेटा हटाने की अनुमति देता है। वे हैं हटाएं और ट्रंकेट . वे जो कर रहे हैं उसमें ये समान हैं, हालाँकि, वे बहुत भिन्न तरीकों का उपयोग करते हैं। इस लेख में, हम इन खोजशब्दों के लिए अंतर्निहित तंत्र पर चर्चा करते हैं।

TRUNCATE और DELETE के बीच अंतर

छंटनी:

  1. TRUNCATE एक DDL कमांड है।
  2. TRUNCATE TABLE हमेशा टेबल और पेज को लॉक करता है। हालांकि, यह प्रत्येक पंक्ति को लॉक नहीं करता है।
  3. WHERE कंडीशन का उपयोग नहीं किया जा सकता।
  4. कमांड सभी डेटा को हटा देता है।
  5. TRUNCATE TABLE ट्रिगर को सक्रिय नहीं कर सकता क्योंकि ऑपरेशन व्यक्तिगत पंक्ति विलोपन को लॉग नहीं करता है।
  6. प्रदर्शन में तेज़, क्योंकि यह लॉग नहीं रखता है।
  7. रोलबैक संभव है।

हटाएं:

  1. DELETE एक DML कमांड है।
  2. डिलीट स्टेटमेंट निष्पादित करते समय एक पंक्ति लॉक का उपयोग करता है। तालिका में प्रत्येक पंक्ति को हटाने के लिए बंद कर दिया गया है।
  3. आप WHERE क्लॉज में फ़िल्टर निर्दिष्ट कर सकते हैं।
  4. यदि WHERE स्थिति मौजूद है तो कमांड निर्दिष्ट डेटा को हटा देता है।
  5. DELETE एक ट्रिगर सक्रिय करता है क्योंकि संचालन व्यक्तिगत रूप से लॉग किए जाते हैं।
  6. DELETE TRUNCATE से धीमा है क्योंकि यह लॉग रखता है।
  7. रोलबैक संभव है।

TRUNCATE की मदद से डेटा कैसे डिलीट करें?

निम्न उदाहरण व्यक्ति तालिका से सभी डेटा को हटा देता है। चुनें कथन TRUNCATE TABLE . के पहले और बाद में शामिल किए गए हैं परिणामों की तुलना करने के लिए कथन।

USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO

आइए कुछ लाभों पर प्रकाश डालें।

ट्रंकेट टेबल आदेश तालिका डेटा को संग्रहीत करने के लिए उपयोग किए गए डेटा पृष्ठों को हटाकर तालिका से सभी पंक्तियों को हटा देता है। एक बार ऑपरेशन पूरा हो जाने के बाद, तालिका में शून्य पृष्ठ होते हैं। यह व्यक्तिगत पंक्ति विलोपन के लिए कोई लॉगिंग नहीं करता है। आदेश लेन-देन लॉग में पृष्ठ डीलोकेशन रिकॉर्ड करता है। ट्रंकेट कमांड कम लॉग स्पेस का उपयोग करता है। आमतौर पर कम ताले का उपयोग किया जाता है। आदेश तालिका से सभी पंक्तियों को हटा देता है, लेकिन तालिका संरचना और उसके कॉलम, बाधाएं, अनुक्रमणिका, और इसी तरह बनी रहती है। तालिका को हटाने के लिए। आपको ड्रॉप टेबल . का उपयोग करने की आवश्यकता है ।

यदि किसी तालिका में एक पहचान स्तंभ है, तो उस स्तंभ के लिए काउंटर को स्तंभ के लिए निर्धारित बीज मान पर रीसेट कर दिया जाता है। यदि कोई बीज परिभाषित नहीं किया गया था, तो डिफ़ॉल्ट मान 1 का उपयोग किया जाता है। पहचान काउंटर बनाए रखने के लिए, हटाएं . का उपयोग करें इसके बजाय।

DELETE का उपयोग करके सभी पंक्तियों को हटाना

निम्न उदाहरण व्यक्ति तालिका से सभी पंक्तियों को हटा देता है:

DELETE FROM Person.Person;
GO

हटाएं एक बार में पंक्तियों को हटा देता है। आदेश प्रत्येक हटाई गई पंक्ति के लेन-देन लॉग में नया रिकॉर्ड जोड़ता है। हटाएं निष्पादित करते समय एक पंक्ति लॉक का उपयोग करता है, जिसका अर्थ है कि तालिका में प्रत्येक पंक्ति को हटाने के लिए बंद कर दिया गया है। एक बार हटाएं निष्पादित किया जाता है, एक तालिका में अभी भी खाली डेटा पृष्ठ हो सकते हैं। उदाहरण के लिए, ढेर में खाली पृष्ठों को कम से कम एक अनन्य (LCK_M_X) टेबल लॉक के बिना नहीं हटाया जा सकता है। हटाएं और ट्रंकेट करें लेनदेन . के साथ उपयोग किए जाने पर दोनों को वापस लाया जा सकता है ।

यह भी पढ़ें

SQL सर्वर में DELETE और TRUNCATE तालिका के बीच अंतर


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2017 में नई सुविधाएँ (डेटाबेस इंजन)

  2. SQL सर्वर NVarchar फ़ील्ड में जापानी वर्णों के बजाय प्रश्न चिह्न वर्ण क्यों संग्रहीत कर रहा है?

  3. SP_dbcmptlevel पदावनत होने के बाद SQL सर्वर डेटाबेस संगतता की जाँच कैसे करें?

  4. SQL सर्वर एकाधिक पंक्ति प्रविष्टियों पर काम करने के लिए एक ट्रिगर

  5. क्या मुझे SQL सर्वर में थोड़ा सा फ़ील्ड इंडेक्स करना चाहिए?