SQL Server數(shù)據(jù)表壓縮
概述
SQL Server的主要性能取決于磁盤I/O效率,SQL Server 。
2008提供了數(shù)據(jù)壓縮功能來提高磁盤I/O效率。
表壓縮意味著減小數(shù)據(jù)的磁盤占有量,所以壓縮可以用在堆表、聚集索引的表、非聚集索引的表、索引視圖、分區(qū)表上。
可壓縮的數(shù)據(jù)類型
smallint、int、Bigint、decimal、numeric、real、float、money、smallmoeny、bit、datetime、datetime2、datetimeoffset、char、nchar、binary、rowversion。
SQLServer中有兩種壓縮類型:數(shù)據(jù)與備份
行壓縮
壓縮會改變數(shù)據(jù)的物理存儲方式,但不需要對代碼做任何修改。
行壓縮流程:首先識別表中每一列的數(shù)據(jù)類型,然后轉(zhuǎn)換為可變長度,最后將存儲空間的請求總量減少到實際需求量。
如:固定長度的類型int、char、nchar等,在數(shù)據(jù)頁中以不定長度的方式存儲(存儲真實數(shù)據(jù)長度)。
1、SSMS行壓縮
表->右鍵->存儲->管理壓縮->對所有分區(qū)使用相同壓縮類型->右側(cè) 選擇row->立即執(zhí)行->完成。
ALTER TABLE [dbo].[AnnexFileList] REBUILD PARTITION = ALL WITH ( DATA_COMPRESSION = ROW );
在壓縮堆表或聚集索引時并不同時包含非聚集索引,因此需要另外單獨對非聚集索引進行操作。
索引->右鍵->存儲->管理壓縮->對所有分區(qū)使用相同壓縮類型->右側(cè) 選擇row->立即執(zhí)行->完成。
ALTER INDEX [PK_ANNEXFILELIST] ON [dbo].[AnnexFileList] REBUILD PARTITION = ALL WITH ( DATA_COMPRESSION = ROW );
2、T-SQL行壓縮
--在現(xiàn)有表進行壓縮 --聚集 alter table ceshi rebuild with(data_compression=row) --非聚集 alter index new_name on ceshi rebuild with(data_compression=row) --在創(chuàng)建表時進行壓縮 create table yasuo ( id int primary key, name varchar(50), mail varchar(50) ) with (data_compression=row)
創(chuàng)建時指定行壓縮方式,這時并未發(fā)生改變。只要數(shù)據(jù)插入表中,該行即被壓縮。
頁壓縮
頁壓縮通過執(zhí)行額外的一些步驟增強了行壓縮的功能。
頁壓縮步驟:行壓縮、前綴壓縮、字典壓縮。
首先對于每一列將確定一個值,此值可以減少每一列中值的存儲空間。一旦確定該值后,每一列的前綴值的行將被存儲在頁頭中。所有的信息稱為壓縮信息,存儲在頁頭之下。標識的值(前綴值)位于沒列中,將由指向壓縮信息部分中對應(yīng)值的引用進行替換。
下一步字典壓縮,搜索整個頁面而非單個列,重復(fù)值被移動到頁頭的壓縮信息部分,取而代之的是指向該值的引用。
在SSMS中頁壓縮步驟與行壓縮步驟一致,只是選擇壓縮方式為Page。T-SQL中將row改成page即可。
需要注意
1、如果保留在內(nèi)存中的數(shù)據(jù)是壓縮的,一旦被選中,則必須先進行解壓縮。
2、在插入新行時,數(shù)據(jù)也是行或頁壓縮的。
3、當更新或刪除時,行壓縮對象保留當前的壓縮級別。但是頁壓縮可能需要重新計算,取決于發(fā)生變化的數(shù)據(jù)量。
用哪種壓縮
- 需要頻繁更新的對象應(yīng)該使用行壓縮。
- 只是執(zhí)行讀取操作的應(yīng)該使用頁壓縮。
到此這篇關(guān)于SQL Server數(shù)據(jù)表壓縮的文章就介紹到這了。希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
MSSQL??附加數(shù)據(jù)庫提示“錯誤?823”數(shù)據(jù)恢復(fù)實操
這篇文章主要介紹了MSSQL?2000?附加數(shù)據(jù)庫提示“錯誤?823”數(shù)據(jù)恢復(fù)實操,報錯823一般數(shù)據(jù)庫的物理頁面出現(xiàn)了損壞或者校驗值損壞導(dǎo)致數(shù)據(jù)庫頁面無法被識別還有異常斷電導(dǎo)致的文件系統(tǒng)損壞,數(shù)據(jù)庫頁面丟失,下面針對錯誤?823對數(shù)據(jù)進行恢復(fù),需要的朋友可以參考一下2022-03-03SQL(MSSQLSERVER)服務(wù)啟動錯誤代碼3414的解決方法
這篇文章主要介紹了SQL(MSSQLSERVER)服務(wù)啟動錯誤代碼3414的解決方法,需要的朋友可以參考下2016-03-03SQL Server創(chuàng)建數(shù)據(jù)庫圖文教程
這篇文章主要介紹了SQL Server創(chuàng)建數(shù)據(jù)庫圖文教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02SQL Server 2005降級到2000的正確操作步驟分享
這篇文章主要和大家一起分享的是SQL Server 2005導(dǎo)入到SQL Server 2000的正確操作步驟,下面就是文章的主要內(nèi)容描述2014-04-04SQL中WHERE變量IS NULL條件導(dǎo)致全表掃描問題的解決方法
今天在評審接手的項目中的存儲過程時,發(fā)現(xiàn)存在大量的在條件里判斷變量是否NULL的寫法2013-09-09