sys.column_store_segments (T-SQL)
Berlaku untuk: SQL Server 2012 (11.x) dan Azure SQL Managed Instance yang lebih baru
Mengembalikan satu baris untuk setiap segmen kolom dalam indeks penyimpan kolom. Ada satu segmen kolom per kolom per grup baris. Misalnya, tabel dengan 10 grup baris dan 34 kolom mengembalikan 340 baris.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
partition_id | bigint | Menunjukkan ID partisi. Unik dalam database. |
hobt_id | bigint | ID indeks timbunan atau pohon B (HoBT) untuk tabel yang memiliki indeks penyimpan kolom ini. |
column_id | int | ID kolom penyimpan kolom. |
segment_id | int | ID grup baris. Untuk kompatibilitas mundur, nama kolom terus dipanggil segment_id meskipun ini adalah ID grup baris. Anda dapat mengidentifikasi segmen secara unik menggunakan <hobt_id, partition_id, column_id>, <segment_id>. |
versi | int | Versi format segmen kolom. |
encoding_type | int | Jenis pengodean yang digunakan untuk segmen tersebut: 1 = VALUE_BASED - non-string/biner tanpa kamus (mirip dengan 4 dengan beberapa variasi internal) 2 = VALUE_HASH_BASED - kolom non-string/biner dengan nilai umum dalam kamus 3 = STRING_HASH_BASED - kolom string/biner dengan nilai umum dalam kamus 4 = STORE_BY_VALUE_BASED - non-string/biner tanpa kamus 5 = STRING_STORE_BY_VALUE_BASED - string/biner tanpa kamus Untuk informasi selengkapnya, lihat bagian Keterangan. |
row_count | int | Jumlah baris dalam grup baris. |
has_nulls | int | 1 jika segmen kolom memiliki nilai null. |
base_id | bigint | ID nilai dasar jika pengodean tipe 1 sedang digunakan. Jika pengodean tipe 1 tidak digunakan, base_id diatur ke -1. |
Besarnya | float | Besaran jika pengodean tipe 1 sedang digunakan. Jika pengodean tipe 1 tidak digunakan, besaran diatur ke -1. |
primary_dictionary_id | int | Nilai 0 mewakili kamus global. Nilai -1 menunjukkan bahwa tidak ada kamus global yang dibuat untuk kolom ini. |
secondary_dictionary_id | int | Nilai bukan nol menunjuk ke kamus lokal untuk kolom ini di segmen saat ini (misalnya, grup baris). Nilai -1 menunjukkan bahwa tidak ada kamus lokal untuk segmen ini. |
min_data_id | bigint | ID data minimum di segmen kolom. |
max_data_id | bigint | ID data maksimum di segmen kolom. |
null_value | bigint | Nilai yang digunakan untuk mewakili null. |
on_disk_size | bigint | Ukuran segmen dalam byte. |
collation_id | int | Berlaku untuk SQL Server 2022 (16.x) dan yang lebih baru. Kolatasi saat ini ketika segmen dibuat. Memetakan ke ID internal. Saat ini hanya internal dan bukan untuk pengembangan. |
min_deep_data | varbinary(18) | Berlaku untuk SQL Server 2022 (16.x) dan yang lebih baru. Digunakan untuk eliminasi segmen.1 Hanya untuk penggunaan internal. |
max_deep_data | varbinary(18) | Berlaku untuk SQL Server 2022 (16.x) dan yang lebih baru. Digunakan untuk eliminasi segmen.1 Hanya untuk penggunaan internal. |
1 Setelah memutakhirkan ke versi SQL Server yang mendukung penghapusan segmen string min/maks (SQL Server 2022 (16.x) dan yang lebih baru), min_deep_data
dan max_deep_data
akan NULL
sampai setelah indeks penyimpan kolom dibangun kembali, menggunakan REBUILD atau DROP/CREATE. Setelah dibangun kembali, segmen yang berisi jenis data yang dapat memperoleh manfaat dari penghapusan segmen string min/maks akan berisi data.
Keterangan
Jenis pengodean segmen penyimpan kolom dipilih oleh Mesin Database dengan tujuan mencapai biaya penyimpanan terendah, dengan menganalisis data segmen. Jika data sebagian besar berbeda, Mesin Database menggunakan pengodean berbasis nilai. Jika data sebagian besar tidak berbeda, Mesin Database menggunakan pengodean berbasis hash. Pilihan antara pengodean berbasis string dan berbasis nilai terkait dengan jenis data yang disimpan, baik data string atau data biner. Semua pengodean memanfaatkan pengodean bit-packing dan run-length jika memungkinkan.
Penghapusan segmen penyimpan kolom berlaku untuk jenis data numerik, tanggal, dan waktu, dan jenis data datetimeoffset dengan skala kurang dari atau sama dengan dua. Dimulai di SQL Server 2022 (16.x), kemampuan eliminasi segmen diperluas ke jenis data string, biner, guid, dan datetimeoffset untuk skala yang lebih besar dari dua. Penghapusan segmen tidak berlaku untuk jenis data LOB seperti panjang jenis data (maks).
Izin
Semua kolom memerlukan setidaknya VIEW DEFINITION
izin pada tabel. Kolom berikut mengembalikan NULL
kecuali pengguna juga memiliki SELECT
izin: has_nulls
, , base_id
, magnitude
min_data_id
, max_data_id
, dan null_value
.
Visibilitas metadata dalam tampilan katalog terbatas pada keamanan yang dimiliki pengguna, atau di mana pengguna diberikan beberapa izin. Untuk informasi selengkapnya, lihat Konfigurasi Visibilitas Metadata.
Contoh
Kueri berikut mengembalikan informasi tentang segmen indeks penyimpan kolom.
SELECT i.name, p.object_id, p.index_id, i.type_desc,
COUNT(*) AS number_of_segments
FROM sys.column_store_segments AS s
INNER JOIN sys.partitions AS p
ON s.hobt_id = p.hobt_id
INNER JOIN sys.indexes AS i
ON p.object_id = i.object_id
WHERE i.type = 5 OR i.type = 6
GROUP BY i.name, p.object_id, p.index_id, i.type_desc ;
GO