خانه SQL Server تفاوت فنی دستورات Delete و Truncate در SQL Server SQL Server دستورات SQL نوشته شده توسط: حمید فرد تاریخ انتشار: ۱۵ شهریور ۱۳۹۴ آخرین بروزرسانی: 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 در فایل تراکنش ذخیره می کند. ما در نیک آموز منتظر نظرات ارزشمند شما درباره این مقاله هستیم. چه رتبه ای میدهید؟ میانگین ۳.۵ / ۵. از مجموع ۲ اولین نفر باش دانلود مقاله تفاوت فنی دستورات 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/ پاسخ به دیدگاه