網站首頁 編程語言 正文
概述
SQL Server的主要性能取決于磁盤I/O效率,SQL Server 。
2008提供了數據壓縮功能來提高磁盤I/O效率。
表壓縮意味著減小數據的磁盤占有量,所以壓縮可以用在堆表、聚集索引的表、非聚集索引的表、索引視圖、分區表上。
可壓縮的數據類型
smallint、int、Bigint、decimal、numeric、real、float、money、smallmoeny、bit、datetime、datetime2、datetimeoffset、char、nchar、binary、rowversion。
SQLServer中有兩種壓縮類型:數據與備份
行壓縮
壓縮會改變數據的物理存儲方式,但不需要對代碼做任何修改。
行壓縮流程:首先識別表中每一列的數據類型,然后轉換為可變長度,最后將存儲空間的請求總量減少到實際需求量。
如:固定長度的類型int、char、nchar等,在數據頁中以不定長度的方式存儲(存儲真實數據長度)。
1、SSMS行壓縮
表->右鍵->存儲->管理壓縮->對所有分區使用相同壓縮類型->右側 選擇row->立即執行->完成。
ALTER TABLE [dbo].[AnnexFileList] REBUILD PARTITION = ALL
WITH ( DATA_COMPRESSION = ROW );
在壓縮堆表或聚集索引時并不同時包含非聚集索引,因此需要另外單獨對非聚集索引進行操作。
索引->右鍵->存儲->管理壓縮->對所有分區使用相同壓縮類型->右側 選擇row->立即執行->完成。
ALTER INDEX [PK_ANNEXFILELIST]
ON [dbo].[AnnexFileList] REBUILD PARTITION = ALL
WITH ( DATA_COMPRESSION = ROW );
2、T-SQL行壓縮
--在現有表進行壓縮
--聚集
alter table ceshi rebuild with(data_compression=row)
--非聚集
alter index new_name on ceshi rebuild with(data_compression=row)
--在創建表時進行壓縮
create table yasuo
(
id int primary key,
name varchar(50),
mail varchar(50)
)
with (data_compression=row)
創建時指定行壓縮方式,這時并未發生改變。只要數據插入表中,該行即被壓縮。
頁壓縮
頁壓縮通過執行額外的一些步驟增強了行壓縮的功能。
頁壓縮步驟:行壓縮、前綴壓縮、字典壓縮。
首先對于每一列將確定一個值,此值可以減少每一列中值的存儲空間。一旦確定該值后,每一列的前綴值的行將被存儲在頁頭中。所有的信息稱為壓縮信息,存儲在頁頭之下。標識的值(前綴值)位于沒列中,將由指向壓縮信息部分中對應值的引用進行替換。
下一步字典壓縮,搜索整個頁面而非單個列,重復值被移動到頁頭的壓縮信息部分,取而代之的是指向該值的引用。
在SSMS中頁壓縮步驟與行壓縮步驟一致,只是選擇壓縮方式為Page。T-SQL中將row改成page即可。
需要注意
1、如果保留在內存中的數據是壓縮的,一旦被選中,則必須先進行解壓縮。
2、在插入新行時,數據也是行或頁壓縮的。
3、當更新或刪除時,行壓縮對象保留當前的壓縮級別。但是頁壓縮可能需要重新計算,取決于發生變化的數據量。
用哪種壓縮
- 需要頻繁更新的對象應該使用行壓縮。
- 只是執行讀取操作的應該使用頁壓縮。
原文鏈接:https://www.cnblogs.com/springsnow/p/9599408.html
相關推薦
- 2022-12-05 Python中的int函數使用_python
- 2023-01-01 C++?Boost?Flyweight庫使用介紹_C 語言
- 2022-05-13 C語言中判斷素數(求素數)的思路與方法實例_C 語言
- 2022-11-09 PostgreSQL索引掃描時為什么index?only?scan不返回ctid_PostgreSQ
- 2022-08-05 springBoot集成swagger啟動報錯:Failed to start bean ‘docu
- 2022-07-12 hadoop 在jps中找不到namenode的原因
- 2022-04-04 react Ant Design使用a標簽href屬性警告解決方法
- 2021-12-10 linux系統文件共享samba配置教程_Linux
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支