PDA

View Full Version : انواع فشرده سازی در sql



emilly
پنج شنبه 08 مرداد 1394, 15:13 عصر
سلام دوستان
در این تایپیک میخوام تا از انواع فشرده سازی در اس کیوال حرف بزنیم ..................

امیدوارم اساتید عزیز نیز کمک مون بکنن:لبخندساده:

emilly
پنج شنبه 08 مرداد 1394, 15:22 عصر
فشرده سازی تا جایی که من میدونم دو نوع است :

یکی به صورت : Row
یکی به صورت : Page


در مورد Row Compression :

نحوه ذخیره سازی فیزیکی داده ها را تغییر می دهد فعال سازی آن اثرات زیر را خواهد داشت
هر رکورد را حداقل می کند.
داده های عددی و رشته با طول ثابت،به صورت اطلاعات با طول متغیر ذخیره خواهند شد مثل varcharها

در مورد Page Comperssion :

برای به حداقل رساندن افزونگی داده ها می باشد.

Page cpmpression : اطلاعات مشترک بین سطرهای یک صفحه به اشتراک گذاشته می شود این روش از فناوری های زیر استفاده می کند.
Row compression :
Prefix compression : به ازای هرستون در یک صفحهprefixهای تکرار یافته شده و در هدر مخصوص فشرده سازی ذخیره می شود.
سپس هر وقت به این prefix ها اشاره شده باشد به عدد منحصر بفرد شناسایی کننده آن ها نسبت داده می شود.




چه چیزهایی را می توان فشرده سازی کرد؟




Table
Partition
Index
Backup

emilly
پنج شنبه 08 مرداد 1394, 15:24 عصر
چه زمانی page compression رخ می دهد؟

زمانی که یک جدول جدید با خاصیت page compressionایجاد میشود compressionرخ نمی دهد.زمانیکه داده ای به اولینpageما اضافه می شود ،داده بصورتrow compression ،می شودبرای اینکه pageهنوز پرنشده است هیچ فایده ای ندارد.زمانیکه page پر شود سطر بعدی که اضافه می شود عملیات page compressionشروع می شود.تمام صفحه بررسی می شود وهر ستون برای فشرده سازیperfix ارزیابی میگرددو سپس همه ستون ها برای فشرده سازیdictionary ارزیابی می شود.اگر صفحه ای که page compression بر روی آن رخ داددیگری به آن اضافه شده و گسترش می یابد.داده هابصورت row compression , page compression فشرده می شود.

لازم به ذکر است که هر page ما در حدود 8 کیلوبایت هستش ..

emilly
پنج شنبه 08 مرداد 1394, 15:25 عصر
دستور مربوط به ایجاد یک جدول با خاصیت Row Compression :





CREATE TABLE T1
(id int, name char(100) )
WITH (DATA_COMPRESSION = ROW);
GO

emilly
پنج شنبه 08 مرداد 1394, 15:27 عصر
دستور مربوط به ایجاد یک جدول با خاصیت Page Compression :





CREATE TABLE T2
(id int, name char(100) )
WITH (DATA_COMPRESSION = PAGE);
GO

emilly
پنج شنبه 08 مرداد 1394, 15:29 عصر
دستور مربوط به ایجاد یک Indexبا خاصیت Page Compression :





CREATE UNIQUE INDEX index11 ON T1 (id)
WITH (DATA_COMPRESSION = Page)
GO






دستور مربوط به ایجاد یک Indexبا خاصیت Row Compression :




CREATE UNIQUE INDEX index11 ON T1 (id)
WITH (DATA_COMPRESSION = Row)
GO

emilly
پنج شنبه 08 مرداد 1394, 15:31 عصر
نحوه ااعمال فشرده ساز ی به صورت PAGE به جدول و ایندکسی که قبلا بدون فشرده سازی ساخته شده اند :







ALTER TABLE T3
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE)
GO










ALTER INDEX index1 ON T1
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE);
GO

emilly
پنج شنبه 08 مرداد 1394, 15:32 عصر
نحوه ااعمال فشرده ساز ی به صورت Row به جد,لی که قبلا بدون فشرده سازی ساخته شده :








ALTER TABLE T3
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = Row)
GO

emilly
پنج شنبه 08 مرداد 1394, 15:37 عصر
نحوه غیر فعال کردن خاصیت فشرده سازی برروی جدول یا ایندکسی که دارای خاصیت فشرده سازی Row or Page می باشد :






ALTER TABLE T1
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = NONE);
GO










ALTER INDEX Index1 ON T1
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = NONE);
GO

emilly
پنج شنبه 08 مرداد 1394, 15:46 عصر
و اما در مورد فشرده سازی پارتیشن :





CREATE TABLE PartitionTable1
(col1 int, col2 varchar(max))
ON myRangePS1 (col1)
WITH
(
DATA_COMPRESSION = ROW ON PARTITIONS (1),
DATA_COMPRESSION = PAGE ON PARTITIONS (2 TO 4)
);
GO










CREATE TABLE PartitionTable2
(col1 int, col2 varchar(max))
ON myRangePS1 (col1)
WITH
(
DATA_COMPRESSION = ROW ON PARTITIONS (1,3),
DATA_COMPRESSION = NONE ON PARTITIONS (2,4)
);
GO

emilly
پنج شنبه 08 مرداد 1394, 15:56 عصر
برای اینکه بک آپ دیتا بیس مون رو هم فشرده سازی بکنیم به صورت زیر عمل می کنیم :

133728