Udostępnij przez


sys.column_store_segments (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Zwraca jeden wiersz dla każdego segmentu kolumny w indeksie columnstore. Na każdą kolumnę w grupie wierszy jest jeden segment kolumny. Na przykład indeks magazynu kolumn z 10 grupami wierszy i 34 kolumnami ma 340 wierszy w tym widoku.

Nazwa kolumny Typ danych Description
partition_id bigint Wskazuje identyfikator partycji. Jest unikalny w bazie danych.
hobt_id bigint ID indeksu kopca lub drzewa B (HoBT) dla tabeli, która posiada ten indeks columnstore.
column_id int Identyfikator kolumny magazynu kolumn.
segment_id int Identyfikator grupy wierszy. Dla kompatybilności wstecznej nazwa kolumny nadal jest nazywana segment_id mimo że jest to identyfikator grupy wierszowej. Możesz jednoznacznie zidentyfikować segment przy użyciu polecenia <hobt_id, partition_id, column_id, segment_id>.
version int Wersja formatu segmentów kolumn.
encoding_type int Rodzaj kodowania używany dla tego segmentu:

1 = VALUE_BASED – nie-ciągowe/binarne bez słownika (podobnie jak 4, z pewnymi wewnętrznymi wariantami)

2 = VALUE_HASH_BASED - kolumna niebędąca ciągiem lub binarnym o wspólnych wartościach w słowniku

3 = STRING_HASH_BASED - kolumna ciągu/binarnego o wspólnych wartościach w słowniku

4 = STORE_BY_VALUE_BASED – nie-ciągowe/binarne bez słownika

5 = STRING_STORE_BY_VALUE_BASED – ciąg/binarny bez słownika

Aby uzyskać więcej informacji, zobacz sekcję Uwagi.
row_count int Liczba wierszy w grupie wierszy.
has_nulls int 1, jeśli segment kolumny ma NULLs.
base_id bigint Identyfikator wartości podstawowej, jeśli używany jest typ kodowania 1. Jeśli typ kodowania 1 nie jest używany, base_id ustawiono wartość -1.
magnitude float Amplituda, jeśli używa się kodowania typu 1. Jeśli typ kodowania 1 nie jest używany, magnitude ustawiono wartość -1.
primary_dictionary_id int Wartość 0 oznacza globalny słownik. Wartość -1 oznacza, że nie utworzono globalnego słownika dla tej kolumny.
secondary_dictionary_id int Wartość niezerowa wskazuje na lokalny słownik dla tej kolumny w bieżącym segmencie (na przykład do grupy wierszy). Wartość -1 oznacza, że nie istnieje lokalny słownik dla tego segmentu.
min_data_id bigint Tylko do użytku wewnętrznego.
max_data_id bigint Tylko do użytku wewnętrznego.
null_value bigint Wartość używana do reprezentowania wartości zerowych.
on_disk_size bigint Rozmiar segmentu w bajtach.
collation_id int Aktualna kolekcja w momencie powstania segmentu. Mapuje się na wewnętrzne ID. Tylko do użytku wewnętrznego.

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance
min_deep_data varbinary(18) Używany do eliminacji segmentów. 1 Tylko do użytku wewnętrznego.

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance
max_deep_data varbinary(18) Używany do eliminacji segmentów. 1 Tylko do użytku wewnętrznego.

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje, Azure SQL Database i Azure SQL Managed Instance

1 Po uaktualnieniu do wersji aparatu bazy danych obsługującej eliminację minimalnego/maksymalnego segmentu dla rozszerzonego zestawu typów danych (wprowadzonego w programie SQL Server 2022 (16.x)), min_deep_datamax_deep_data i są NULL do czasu odbudowy indeksu magazynu kolumn przy użyciu ALTER INDEX ... REBUILD instrukcji or CREATE INDEX ... WITH (DROP_EXISTING = ON) .

Uwagi

Typ kodowania segmentu magazynu kolumn jest wybierany przez aparat bazy danych, analizując dane segmentu w celu osiągnięcia najniższego kosztu magazynowania. Jeśli dane są w większości odrębne, silnik bazy danych wykorzystuje kodowanie oparte na wartościach. Jeśli dane są w większości nieodznaczone, silnik bazy danych używa kodowania opartego na haszu. Wybór między kodowaniem na podstawie ciągów łańcuchów i wartości zależy od rodzaju przechowywanych danych, czy to danych ciągowych, czy binarnych. Wszystkie kodowania wykorzystują pakowanie bitów i kodowanie długości serii, gdy to możliwe.

Eliminacja segmentu magazynu kolumn dotyczy typów danych liczbowych, dat i godzin oraz typu danych datetimeoffset ze skalowaniem mniejszym lub równym dwóm. Począwszy od programu SQL Server 2022 (16.x), możliwości eliminacji segmentów rozszerzają się na typy ciągów i danych binarnych, unikatowy typ danychidentyfikatora i typ danych datetimeoffset w celu skalowania większego niż dwa. Eliminacja segmentów nie ma zastosowania do typów danych LOB, takich jak varchar(max), nvarchar(max)i varbinary(max). Aby uzyskać więcej informacji, zobacz Co nowego w indeksach columnstore.

Permissions

Wymagane VIEW DEFINITION jest uprawnienie do widoku. Następujące kolumny zwracająNULL, chyba że użytkownik ma SELECT również uprawnienie: has_nulls, , base_id, min_data_idmagnitude, , max_data_idi null_value.

Widoczność metadanych w widokach katalogu jest ograniczona do obiektów, których właścicielem jest użytkownik lub w stosunku do których użytkownik ma jakieś uprawnienia. Aby uzyskać więcej informacji, zobacz Konfiguracja widoczności metadanych.

Przykłady

Następujące zapytanie zwraca informacje o segmentach indeksu columnstore.

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;