خانه SQL Server تفاوت فنی دستورات Delete و Truncate در SQL Server SQL Server دستورات SQL نوشته شده توسط: حمید فرد تاریخ انتشار: ۱۵ شهریور ۱۳۹۴ آخرین بروزرسانی: ۱۹ مهر ۱۴۰۲ زمان مطالعه: 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 ، به مقاله زیر مراجعه کنید. چه رتبه ای میدهید؟ میانگین ۳.۵ / ۵. از مجموع ۲ اولین نفر باش دانلود مقاله تفاوت فنی دستورات Delete و Truncate در SQL Server فرمت PDF 9 صفحه حجم 1 مگابایت دانلود مقاله معرفی نویسنده مقالات 6 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده حمید فرد معرفی محصول ایمان باقری دوره آموزشی کوئری نویسی در SQL Server 2.190.000 تومان مقالات مرتبط ۰۲ آبان SQL Server ابزار Database Engine Tuning Advisor؛ مزایا، کاربردها و روش استفاده تیم فنی نیک آموز ۱۵ مهر SQL Server معرفی Performance Monitor ابزار مانیتورینگ SQL Server تیم فنی نیک آموز ۱۱ مهر SQL Server راهنمای جامع مانیتورینگ بکاپ ها در SQL Server تیم فنی نیک آموز ۰۸ مهر SQL Server Resource Governor چیست؟ آشنایی با نحوه پیکربندی و اهمیت های آن تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ مجتبی شهریور ۲۷ / ۰۶ / ۹۴ - ۰۱:۵۱ سلامضمن تشکر از مقاله خوبتاننتیجه کلی را کاش بیان می فرمودین و اینکه نهایتا کدوم بهتر هست متشکرم پاسخ به دیدگاه مسعود طاهری ۲۹ / ۰۶ / ۹۴ - ۰۷:۳۷ سلام هر کدام از این دو دستور کاربرد خاص خودشان را دارند. کاربرد هر کدام از آنها در لینک های زیر بررسی شده است https://nikamooz.com/truncate-statement-sql/ https://nikamooz.com/video-truncate-statement-sql/ پاسخ به دیدگاه کوروش ۱۲ / ۰۷ / ۹۹ - ۰۳:۰۸ هیچکدام از صفحه های ذکر شده یافت نشد!!!!!!!!!!!!!!!!!! با تشکر پاسخ به دیدگاه آرزو محمدزاده ۰۱ / ۰۶ / ۰۰ - ۰۹:۱۳ درود بر شما هر دو لینک بررسی شد لطفا کش مرورگر را خالی کنید و مجدد تست نمایید. تشکر از شما پاسخ به دیدگاه m ۱۹ / ۰۶ / ۹۴ - ۰۳:۵۱ سلام عالی بود پاسخ به دیدگاه Hamid J. Fard ۲۱ / ۰۶ / ۹۴ - ۰۸:۱۵ ممنون. امیدوارم جالب توجه بوده باشه. پاسخ به دیدگاه آرزو محمدزاده ۰۱ / ۰۶ / ۰۰ - ۰۹:۱۳ درود بر شما هر دو لینک بررسی شد لطفا کش مرورگر را خالی کنید و مجدد تست نمایید. تشکر از شما پاسخ به دیدگاه کوروش ۱۲ / ۰۷ / ۹۹ - ۰۳:۰۸ هیچکدام از صفحه های ذکر شده یافت نشد!!!!!!!!!!!!!!!!!! با تشکر پاسخ به دیدگاه مسعود طاهری ۲۹ / ۰۶ / ۹۴ - ۰۷:۳۷ سلام هر کدام از این دو دستور کاربرد خاص خودشان را دارند. کاربرد هر کدام از آنها در لینک های زیر بررسی شده است https://nikamooz.com/truncate-statement-sql/ https://nikamooz.com/video-truncate-statement-sql/ پاسخ به دیدگاه