Khi bạn tạo một bảng trong SQL Server, bạn có tùy chọn sử dụng tính năng nén dữ liệu.
Nén dữ liệu giúp giảm kích thước của cơ sở dữ liệu. Nó cũng có thể giúp cải thiện hiệu suất của khối lượng công việc chuyên sâu I / O do dữ liệu được lưu trữ trong ít trang hơn, do đó giảm số lượng trang mà các truy vấn cần đọc từ đĩa.
Để thực hiện việc này, hãy sử dụng DATA_COMPRESSION
khi tạo bảng.
Ví dụ
Đây là một ví dụ để chứng minh.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = ROW);
Trong trường hợp này, tôi sử dụng nén hàng.
Phần sau sử dụng tính năng nén trang.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = PAGE);
Cách loại bỏ nén
Bạn có thể loại bỏ phần nén bằng cách sử dụng ALTER TABLE
để tạo lại bảng, trong khi sử dụng NONE
dưới dạng kiểu nén.
ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);
Bảng Columnstore
Nếu bạn đang sử dụng bảng columnstore (các bảng được lưu trữ bằng chỉ mục columnstore được phân cụm), thì các kiểu nén ở trên không áp dụng. Trong trường hợp này, các tùy chọn nén của bạn là COLUMNSTORE
và COLUMNSTORE_ARCHIVE
.
Kết quả nén có thể thay đổi
Số lượng nén bạn nhận được sẽ phụ thuộc vào dữ liệu và kiểu nén.
ROW
nén, chẳng hạn, loại bỏ các byte không cần thiết khỏi các giá trị cột bằng cách lưu trữ chúng ở định dạng độ dài thay đổi. PAGE
mặt khác, nén chỉ lưu trữ các giá trị lặp lại một lần trên mỗi trang và đặt con trỏ từ các cột tương ứng trong trang.
Đôi khi, bạn có thể thấy rằng việc nén một đối tượng không phải lúc nào cũng làm giảm kích thước của nó và trong một số trường hợp có thể thực sự tăng kích thước của nó.
Điều này có thể xảy ra nếu các cột của bạn sử dụng loại dữ liệu không được hưởng lợi từ việc nén.
Ngoài ra, nén hàng làm giảm chi phí siêu dữ liệu, nhưng trong một số trường hợp, tổng chi phí có thể lớn hơn định dạng lưu trữ cũ.
Nếu dữ liệu của bạn không nhận được lợi ích nào từ việc nén do loại dữ liệu của nó, thì có khả năng chi phí sẽ làm tăng yêu cầu lưu trữ hơn là giảm.
Nhưng các biến thể về kích thước nén cũng sẽ phụ thuộc vào dữ liệu thực tế. Ví dụ:nếu bạn có char (10) cột, nén sẽ loại bỏ mọi ký tự đệm ở cuối. Nếu bạn có nhiều hàng có ký tự đệm ở cuối, bạn sẽ nhận được kết quả tốt hơn nếu bạn không có (hoặc ít) hàng có ký tự đệm ở cuối.