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

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

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

مقایسه Delete و Truncate، در این مقاله قرار است این دو دستور را با یکدیگر مقایسه کنیم. این دو دستور جهت حذف کوئری ها در SQL Server به کار می روند اما بایکدیگر تفاوت هایی دارند. اول باید این دو دستور را به صورت جداگانه مقایسه کنیم. برای درک بهتر مفاهیم آموزش جامع SQL Server را مطالعه کنید.

مقایسه Delete و Truncate

در این بخش از مقاله به مقایسه این دو دستور می پردازیم با ما همراه باشید:

دستور Delete

۱- دستور 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 در فایل تراکنش ذخیره می کند. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم.

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

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

اولین نفر باش

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

close-image

دانلود رایگان: آموزش SQL Server

هر روز یک ویدئو آموزشی رایگان برای شما ایمیل خواهد شد!

پاپ آپ | SQL Server

  • این قسمت برای اهداف اعتبارسنجی است و باید بدون تغییر باقی بماند.