ویژگی فشرده سازی در SQL این امکان را به ما میدهد که حجم دیتای جداول را کم کنیم ، حال ممکن است بپرسید کمتر کردن حجم دیتا به جز کاهش حجم مصرفی هارد دیسک چه مزایایی دارد؟ خوب همانطور که میدانید داده ها در اس کیو ال سرور در صفحات ذخیره میشوند و در هنگام واکشی اطلاعات (دستورات Select ) این صفحات به حافظه Ram فراخوانی میشوند و بعد از اعمال شرایط و ستون ها نتیجه نهایی نمایش داده میشود .حال اگر با استفاده از فشرده سازی تعداد صفحات کمتری به حافظه Ram فراخوانی شوند ، کوئری ها در واقع صفحات کمتری را پیمایش میکنند و در نتیجه زمان I/O کاهش پیدا میکند واین به سرعت اجرای کوئری شما کمک خواهد کرد .
نوع اول : Row level Compression : این نوع فشرده سازی در سطح رکورد انجام میشود. در واقع دیتاهایی که به شکل ثابت هستند را به نوع داده با طول متغیر تبدیل میکند . برای مثال فرض کنید یک جدول با یک نوع (Char(50 تعریف کنیم ، حال اگر دیتای Sahar Beyrami را در یک سطر آن وارد نمائیم ، در حالت عادی این دیتا همان 50 بایت فضا را اشغال میکند و اگر بر روی جدول فشرده سازی در سطح رکورد انجام شود به تعداد 13 بایت فضا اشغال خواهد کرد ( یعنی تعداد کاراکتر های Sahar Beyrami ) این موضوع برای انواع داده های دیگر نیز صادق است .
نوع دوم : Page Level Compression : فشرده سازی در سطح Page در واقع از سه فشرده سازی تشکیل شده است:
Row Compression که در بالا شرح داده شد و اما در فشرده سازی دوم عبارات تکرای در ستون ها شناسایی میشود و به جای آنها از یک Token یا نشانه استفاده میشود و خود Token در قسمت هدر صفحه ذخیره میشود . به مثال زیر دقت کنید ، تصویر اول جدول قبل از Prefix Compression و تصویر دو بعد از آن را نمایش میدهد . بنابراین در این مرحله از فشرده سازی بجای دیتای مشترک در ستون ها از نشانه ها استفاده میشود .
در فشرده سازی مرحله سوم یعنی Dictionary compression مرحله دوم تکمیل میشود و در واقع عبارات تکراری در کل صفحه شناسایی و همانند یک دیکشنری عبارات تکراری به هدر صفحه منتقل میشوند و نشانه ها در کل صفحه به جای عبارات تکراری می نشینند .
حال با استفاده از یک مثال عملی که در Sql پیاده سازی و اجرا شده پیش می رویم : در این مثال سه جدول زیر را ایجاد کنید .( در ادامه اسکریپت ها به طور کامل نوشته شده )
همانطور که می بینید برای ایجاد جدول با فشرده سازی از عبارت WITH (Data_Compression = Page) استفاده می کنیم .بعد از ایجاد جداول و درج دیتا در سه جدول دستور زیر را بری نمایش حجم مصرفی جدوال استفاده می کنیم :
SPSPACEUSED NoneCompression
GO
SPSPACEUSED RowsCompression
GO
SPSPACEUSED PageCompression
GO
نتیجه همانند شکل بالا خواهد بود . همانطور که می بینید، جدول در حالت عادی 896 کیلو بایت ، در نوع دوم فشرده سازی 728 کیلو بایت و در نوع فشرده سازی سوم 16 کیلو بایت فضا اشغال شده است . خوب حالا اگر دستور * Select را برای سه جدول اجرا کنیم و کلید Ctl+ L را برای مقایسه سه دستور اجرا کنیم نتیجه به شکل زیر خواهد بود . از تصویر مشخص است که هزینه اجرای کوئری در حالتی که بر روی جدول فشرده سازی از نوع Page انجام شده 3 درصد ، در فشرده سازی نوع رکورد 44 درصد و در حالت عادی 53 درصد است که طبعا 3 درصد خیلی کمتر است . در واقع با استفاده از فشرده سازی سرعت اجرای کوئری به مقدار قابل توجهی افزایش می یابد.
در پایان اگر جدولی از قبل ایجاد کرده اید و حال میخواهید فشرده سازی بر روی انجام دهید کافی است از دستور زیر استفاده کنید :
(ALTER TABLE [TableName] REBUILD WITH (DATA_COMPRESSION = ROW
به جای Row ، از Page و یا None استفاده کنید. امیدوارم این مقاله مفید باشد.
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود