Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Nén một phân vùng cụ thể trong một bảng trong SQL Server (T-SQL)

Khi bạn nén một bảng được phân vùng trong SQL Server, bạn có thể nén tất cả các phân vùng, một số hoặc chỉ một phân vùng.

Để thực hiện việc này, hãy sử dụng REBUILD PARTITION cú pháp trong ALTER TABLE tuyên bố.

Khi thực hiện việc này, bạn có thể chỉ xây dựng lại phân vùng được chỉ định hoặc tất cả các phân vùng. Ngoài ra, bạn có thể xây dựng lại tất cả các phân vùng, trong khi chỉ nén một phân vùng cụ thể hoặc danh sách các phân vùng.

Ví dụ 1 - Tạo lại một phân vùng

Trong ví dụ đầu tiên này, chúng tôi xây dựng lại và nén chỉ một phân vùng trong bảng.

Ước tính tiết kiệm nén

Hãy tưởng tượng chúng ta muốn nén một phân vùng duy nhất trong một bảng có tên là Movies .

Đầu tiên, chúng ta có thể sử dụng sp_estimate_data_compression_savings hệ thống lưu trữ quy trình để ước tính khoản tiết kiệm mà chúng tôi sẽ nhận được từ việc nén bảng.

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'ROW';

Kết quả (sử dụng đầu ra dọc):

object_name                                        | Movies
schema_name                                        | dbo
index_id                                           | 1
partition_number                                   | 3
size_with_current_compression_setting(KB)          | 120
size_with_requested_compression_setting(KB)        | 88
sample_size_with_current_compression_setting(KB)   | 128
sample_size_with_requested_compression_setting(KB) | 96

Theo sp_estimate_data_compression_savings , kích thước phân vùng sẽ giảm từ 120 KB xuống 88 KB sau khi chúng tôi nén nó.

Nén phân vùng

Hãy tiếp tục và nén nó.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW);

Trong trường hợp này, tôi đã sử dụng nén hàng.

Xác minh Tiết kiệm Nén

Bây giờ, nếu chúng ta truy vấn sp_estimate_data_compression_savings một lần nữa, chúng ta sẽ thấy rằng kích thước hiện tại chính xác như đã được ước tính trước đây (88 KB).

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'NONE';

Kết quả (sử dụng đầu ra dọc):

object_name                                        | Movies
schema_name                                        | dbo
index_id                                           | 1
partition_number                                   | 3
size_with_current_compression_setting(KB)          | 88
size_with_requested_compression_setting(KB)        | 112
sample_size_with_current_compression_setting(KB)   | 96
sample_size_with_requested_compression_setting(KB) | 128

Trong ví dụ này, tôi nhận được ước tính về yêu cầu dung lượng nếu tôi muốn xóa nén (tức là đặt nó thành NONE ).

Xác minh Phân vùng nào sử dụng Nén

Chúng tôi cũng có thể sử dụng sys.partitions xem để xác minh rằng phân vùng có nén.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Kết quả:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 0                  | NONE                    |
| 4                  | 0                  | NONE                    |
| 3                  | 1                  | ROW                     |
+--------------------+--------------------+-------------------------+

Xóa nén

Trước khi chúng ta chuyển sang ví dụ 2, hãy xóa phần nén khỏi phân vùng.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE);

Ví dụ 2 - Nén Nhiều Phân vùng

Trong ví dụ này, chúng ta xây dựng lại tất cả các phân vùng, nhưng chỉ chỉ định các phân vùng mà chúng ta muốn nén.

Đây là một phương pháp thay thế cho ví dụ đầu tiên của chúng tôi. Sử dụng cú pháp này, chúng tôi có thể chỉ định danh sách các phân vùng để nén.

ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3));

Trong trường hợp này, tôi đã xây dựng lại tất cả các phân vùng, nhưng tôi chỉ nén các phân vùng 2 và 3.

Một lần nữa, chúng ta có thể sử dụng sys.partitions để xác minh rằng chúng đã được nén.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies');

Kết quả:

+--------------------+--------------------+-------------------------+
| partition_number   | data_compression   | data_compression_desc   |
|--------------------+--------------------+-------------------------|
| 1                  | 0                  | NONE                    |
| 2                  | 1                  | ROW                     |
| 3                  | 1                  | ROW                     |
| 4                  | 0                  | NONE                    |
+--------------------+--------------------+-------------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ảnh chụp nhanh cơ sở dữ liệu SQL Server -4

  2. Nhà cung cấp có tên là nhà cung cấp đường ống lỗi 40 không thể mở kết nối đến SQL Server lỗi 2

  3. Làm cách nào để nhập tệp Excel vào SQL Server?

  4. Tổng quan về các kiểu Nối SQL với các ví dụ

  5. Cách chèn dữ liệu Excel hoặc CSV vào Bảng bằng cách sử dụng Giao diện người dùng đồ họa trong SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 102