تفاوت فنی دستورات Delete و Truncate در SQL Server

تفاوت فنی دستورات Delete و Truncate در SQL Server

نوشته شده توسط: حمید فرد
تاریخ انتشار: ۱۵ شهریور ۱۳۹۴
آخرین بروزرسانی: ۱۹ مهر ۱۴۰۲
زمان مطالعه: 13 دقیقه
۳.۵
(۲)

مقدمه

اوایل ماه آگوست چند مدیر پایگاه داده و برنامه نویس در فیسبوک از من پرسیدند که چه تفاوت فنی بین دو دستور Delete و Truncate است. من هم چون دیدم این مطلب می تونه واسه همه مفید باشه به صورت مقاله در آوردم که هم در لینکداین (انگلیسی) موجود است. اول باید این دو دستور را به صورت جداگانه مقایسه کنیم.

Delete

۱- این دستور تمام رکوردها یا یک سری از رکورد ها را به صورت یک به یک حذف می کند (البته یک علامت به عنوان حذف شده بر روی رکوردها می گذارد تا زمانی که تراکنش Commit شود)
۲- اطلاعات رکورد علامت گذاری شده یا حذف شده را بر روی فایل تراکنش می نویسد.
۳- بعد از حذف رکورد Delete Trigger را فعال می کند.
۴- متادیتاهای Clustered Index یا Heap را تغییر می دهد.
۵- مقدار Identity را صفر نمی کند.

Truncate

۱- این دستور تمام Data Pageهای جدول یا ایندکس را با علامت حذف شده علامت گذاری میکند تا زمانی که تراکنش Commit شود.
۲- در حین علامت گذاری شماره FileID, PageID را در فایل تراکنش می نویسد.
۳- بعد از حذف Data Pageها Delete Trigger را فعال نمی کند.
۴- متادیتاهای Clustered Index یا Heap را تغییر می دهد.
۵- مقدار Identity را صفر می کند.
نتیجه کلی سرعت Truncate بسیار بالاتر از Delete است.
ولی چرا دستور Truncate به عنوان DDL در فایل تراکنش ذخیره می شود!!!!!!
کد زیر یک جدول با مقداری رکورد برای نشان دادن این موضوع می سازد.
همانطور که در عکس زیر می بینید جدول ساخته شده دارای ۲۵ عدد Page است که ۲۴ عدد Page استفاده شده و ۲۳ عدد Data Page است.
حال می خواهیم عکس العمل SQL Server در مقابل دستور Delete را مشاهده کنیم. کد زیر یک تراکنش ساخته و نوع Lock و تعداد Data Page ها را بعد از دستور Delete چک می کند.
همانطور که مشاهده می کنید SQL Server جدول را قفل کرده که از نوع Exclusive است. یعنی هیچ تراکنشی توانایی خواند و نوشتن را ندارد مگر آنکه از دستور NOLOCK استفاده شود.
 
حالا یکبار دیگر جدول را پر از داده کنیم و کد زیر را که از دستور Truncate استفاده شده اجرا کنیم.
 
همانطور که مشاهده می کنید دستور Truncate قفلی از نوع Sch-M که به نوعی اجازه نوشتن و خواندن به تراکنشهای دیگر را نمی دهد. به دلیل همین نوع قفل SQL Server دستور Truncate را به عنوان دستور DDL در فایل تراکنش ذخیره می کند.
 

 

برای بدست آوردن اطلاعات بیش‌تر در مورد دیگر دستورات SQL ، به مقاله زیر مراجعه کنید.
 
دستورهای SQL Server

چه رتبه ای می‌دهید؟

میانگین ۳.۵ / ۵. از مجموع ۲

اولین نفر باش

title sign
دانلود مقاله
تفاوت فنی دستورات Delete و Truncate در SQL Server
فرمت PDF
9 صفحه
حجم 1 مگابایت
دانلود مقاله
title sign
معرفی نویسنده
حمید فرد
مقالات
6 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
حمید فرد
title sign
دیدگاه کاربران