Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Компресиране на специфичен дял в таблица в SQL Server (T-SQL)

Когато компресирате разделена таблица в SQL Server, можете да компресирате всички дялове, някои или само един дял.

За да направите това, използвайте REBUILD PARTITION синтаксис в ALTER TABLE изявление.

Когато правите това, можете да възстановите само посочения дял или всички дялове. Като алтернатива можете да изградите отново всички дялове, като същевременно компресирате само конкретен дял или списък с дялове.

Пример 1 – Възстановяване на един дял

В този първи пример ние възстановяваме и компресираме само един дял в таблицата.

Оценка на спестяванията от компресия

Представете си, че искаме да компресираме един дял в таблица, наречена Movies .

Първо, можем да използваме sp_estimate_data_compression_savings системна съхранена процедура за оценка на спестяванията, които бихме получили от компресирането на таблицата.

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

Резултат (с помощта на вертикален изход):

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

Според sp_estimate_data_compression_savings , размерът на дяла трябва да намалее от 120 KB на 88 KB, след като го компресираме.

Компресирайте дяла

Да продължим и да го компресираме.

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

В този случай използвах компресия на редове.

Проверете спестяванията от компресия

Сега, ако потърсим sp_estimate_data_compression_savings отново ще видим, че сегашният размер е точно както беше оценен преди (88 KB).

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

Резултат (с помощта на вертикален изход):

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

В този пример получавам оценка на изискванията за пространство, ако трябва да премахна компресията (т.е. да я задам на NONE ).

Проверете кои дялове използват компресия

Можем също да използваме sys.partitions преглед, за да проверите дали дялът има компресия.

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

Резултат:

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

Премахване на компресията

Преди да преминем към пример 2, нека премахнем компресията от дяла.

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

Пример 2 – Компресиране на множество дялове

В този пример ние изграждаме отново всички дялове, но указваме само дяловете, които искаме да бъдат компресирани.

Това е алтернативен метод на нашия първи пример. Използвайки този синтаксис, можем да посочим списък с дялове за компресиране.

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

В този случай възстанових всички дялове, но компресирах само дялове 2 и 3.

Отново можем да използваме sys.partitions за да проверите дали са компресирани.

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

Резултат:

+--------------------+--------------------+-------------------------+
| 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. Научете се да съхранявате и анализирате документи във файлова система на Windows със семантично търсене на SQL Server – част 1

  2. Защо да използвате ниво на изолация ЧЕТЕНЕ НЕКОНТРОЛИРАНО?

  3. Улавяне на броя от SQL заявка

  4. Ефективно преобразуване на дати между UTC и местно (т.е. PST) време в SQL 2005

  5. Как да изчислим процента с SQL израз