Saat Anda membuat tabel di SQL Server, Anda memiliki opsi untuk menggunakan kompresi data.
Kompresi data membantu mengurangi ukuran database. Ini juga dapat membantu meningkatkan kinerja beban kerja intensif I/O karena data disimpan di lebih sedikit halaman, sehingga mengurangi jumlah halaman yang perlu dibaca kueri dari disk.
Untuk melakukannya, gunakan DATA_COMPRESSION
pilihan saat membuat tabel.
Contoh
Berikut ini contoh untuk didemonstrasikan.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = ROW);
Dalam hal ini saya menggunakan kompresi baris.
Berikut ini menggunakan kompresi halaman.
CREATE TABLE Movies (
MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
MovieName nvarchar(200)
)
WITH (DATA_COMPRESSION = PAGE);
Cara Menghapus Kompresi
Anda dapat menghapus kompresi dengan menggunakan ALTER TABLE
pernyataan untuk membangun kembali tabel, saat menggunakan NONE
sebagai jenis kompresi.
ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);
Tabel Penyimpanan Kolom
Jika Anda menggunakan tabel columnstore (tabel yang disimpan dengan indeks columnstore berkerumun), jenis kompresi di atas tidak berlaku. Dalam hal ini, opsi kompresi Anda adalah COLUMNSTORE
dan COLUMNSTORE_ARCHIVE
.
Hasil Kompresi Bisa Bervariasi
Jumlah kompresi yang Anda dapatkan akan bergantung pada data dan jenis kompresi.
ROW
kompresi, misalnya, menghapus byte yang tidak dibutuhkan dari nilai kolom dengan menyimpannya dalam format panjang variabel. PAGE
kompresi, di sisi lain, menyimpan nilai berulang hanya sekali per halaman, dan menyetel penunjuk dari masing-masing kolom di dalam halaman.
Terkadang Anda mungkin menemukan bahwa mengompresi suatu objek tidak selalu mengurangi ukurannya, dan dalam beberapa kasus sebenarnya dapat meningkatkan ukurannya.
Ini bisa terjadi jika kolom Anda menggunakan tipe data yang tidak memanfaatkan kompresi.
Juga, kompresi baris mengurangi overhead metadata, tetapi dalam beberapa kasus, overhead mungkin lebih besar daripada format penyimpanan lama.
Jika data Anda tidak menerima manfaat dari kompresi karena jenis datanya, kemungkinan overhead tersebut akan menyebabkan peningkatan kebutuhan penyimpanan, bukan penurunan.
Tetapi variasi ukuran kompresi juga akan tergantung pada data aktual. Misalnya, jika Anda memiliki char(10) kolom, kompresi akan menghapus semua karakter padding yang tertinggal. Jika Anda memiliki banyak baris dengan karakter bantalan tambahan, Anda akan mendapatkan hasil yang lebih baik daripada jika Anda tidak memiliki (atau sedikit) baris dengan karakter bantalan tambahan.