Bagikan melalui


sys.column_store_segments (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

Mengembalikan satu baris untuk setiap segmen kolom dalam indeks penyimpan kolom. Ada satu segmen kolom per kolom per grup baris. Misalnya, indeks penyimpan kolom dengan 10 grup baris dan 34 kolom memiliki 340 baris dalam tampilan ini.

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>.
version 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 NULL.
base_id bigint ID nilai dasar jika pengodean tipe 1 sedang digunakan. Jika pengodean tipe 1 tidak digunakan, base_id diatur ke -1.
magnitude float Besaran jika pengodean tipe 1 sedang digunakan. Jika pengodean tipe 1 tidak digunakan, magnitude 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 Hanya untuk penggunaan internal.
max_data_id bigint Hanya untuk penggunaan internal.
null_value bigint Nilai yang digunakan untuk mewakili null.
on_disk_size bigint Ukuran segmen dalam byte.
collation_id int Kolatasi saat ini ketika segmen dibuat. Memetakan ke ID internal. Hanya untuk penggunaan internal.

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance
min_deep_data varbinary(18) Digunakan untuk eliminasi segmen.1 Hanya untuk penggunaan internal.

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance
max_deep_data varbinary(18) Digunakan untuk eliminasi segmen.1 Hanya untuk penggunaan internal.

Berlaku untuk: SQL Server 2022 (16.x) dan versi yang lebih baru, Azure SQL Database, dan Azure SQL Managed Instance

1 Setelah meningkatkan ke versi Mesin Database yang mendukung penghapusan segmen min/maks untuk serangkaian jenis data yang diperluas (diperkenalkan di SQL Server 2022 (16.x)), min_deep_data dan max_deep_data hingga NULL indeks penyimpan kolom dibangun kembali menggunakan pernyataan ALTER INDEX ... REBUILD atau CREATE INDEX ... WITH (DROP_EXISTING = ON) .

Keterangan

Jenis pengodean segmen penyimpan kolom dipilih oleh Mesin Database dengan menganalisis data segmen dengan tujuan mencapai biaya penyimpanan terendah. 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. Mulai SQL Server 2022 (16.x), kemampuan eliminasi segmen diperluas ke jenis data string dan biner, jenis data pengidentifikasi unik , dan jenis data datetimeoffset untuk skala yang lebih besar dari dua. Penghapusan segmen tidak berlaku untuk jenis data LOB seperti varchar(max), nvarchar(max), dan varbinary(max). Untuk informasi selengkapnya, lihat Apa yang baru dalam indeks penyimpan kolom.

Izin

Izin VIEW DEFINITION pada tampilan diperlukan. Kolom berikut mengembalikan NULL kecuali pengguna juga memiliki SELECT izin: has_nulls, , base_idmagnitude, 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;