分享方式:


sys.column_store_segments (Transact-SQL)

適用於: SQL Server 2012 (11.x) 和更新版本 Azure SQL 受控執行個體

針對數據行存放區索引中的每個數據行區段,各傳回一個數據列。 每個數據列群組每個數據行都有一個數據行區段。 例如,具有10個數據列群組和34個數據行的數據表會傳回340個數據列。

資料行名稱 資料類型 描述
partition_id bigint 表示分割區標識碼。 在資料庫內是唯一的。
hobt_id bigint 具有此數據行存放區索引之數據表的堆積或 B 型樹狀結構索引 (HoBT) 識別碼。
column_id int 數據行存放區數據行的識別碼。
segment_id int 數據列群組的標識碼。 為了保持回溯相容性,即使這是數據列群組標識符,仍會繼續呼叫數據行名稱segment_id。 您可以使用hobt_id、partition_id、column_id、<segment_id>>來唯一識別區段<。
version int 數據行區段格式的版本。
encoding_type int 用於該區段的編碼型態:

1 = VALUE_BASED - 沒有字典的非字串/二進位檔(類似於 4,具有一些內部變化)

2 = VALUE_HASH_BASED - 字典中具有通用值的非字串/二進位數據行

3 = STRING_HASH_BASED - 字典中具有一般值的字串/二進位數據行

4 = STORE_BY_VALUE_BASED - 沒有字典的非字串/二進位

5 = STRING_STORE_BY_VALUE_BASED - 沒有字典的字串/二進位

如需詳細資訊,請參閱備註一節。
row_count int 數據列群組中的數據列數目。
has_nulls int 如果數據行區段具有 Null 值,則為 1。
base_id bigint 如果使用編碼類型 1,則為基底值識別碼。 如果未使用編碼類型 1,base_id會設定為 -1。
大小 float 如果使用編碼類型 1,則為大小。 如果未使用編碼類型 1,則大小設定為 -1。
primary_dictionary_id int 值為 0 表示全域字典。 值 -1 表示沒有為此數據行建立全域字典。
secondary_dictionary_id int 非零值會指向目前區段中此數據行的本機字典(例如數據列群組)。 值為 -1 表示此區段沒有本機字典。
min_data_id bigint 數據行區段中的數據標識元下限。
max_data_id bigint 數據行區段中的數據識別碼上限。
null_value bigint 用來表示 Null 的值。
on_disk_size bigint 以位元組為單位的區段大小。
collation_id int 適用於 SQL Server 2022 (16.x) 和更新版本。
建立區段時的目前定序。 對應至內部標識碼。 目前僅供內部使用,而非用於開發。
min_deep_data varbinary(18) 適用於 SQL Server 2022 (16.x) 和更新版本。
用於區段消除。1 僅供內部使用。
max_deep_data varbinary(18) 適用於 SQL Server 2022 (16.x) 和更新版本。
用於區段消除。1 僅供內部使用。

1 升級至支援字串最小/最大區段消除的 SQL Server 版本之後(SQL Server 2022 (16.x) 和更新版本, min_deep_data 而且 max_deep_dataNULL 直到使用 REBUILD 或 DROP/CREATE 重建數據行存放區索引之後。 重建之後,包含可受益於字串最小值/最大區段刪除之數據類型的區段將會包含數據。

備註

數據行存放區區段編碼類型是由 資料庫引擎 選取,目標是藉由分析區段數據來達到最低的記憶體成本。 如果數據大多不同,則 資料庫引擎 會使用以值為基礎的編碼。 如果數據大多不相異,則 資料庫引擎 會使用哈希型編碼。 字串型和值型編碼之間的選擇,與所儲存的數據類型有關,無論是字串數據還是二進位數據。 所有編碼都盡可能利用位封裝和運行長度編碼。

數據行存放區區段消除適用於數值、日期和時間數據類型,以及小於或等於兩個小數字數的 datetimeoffset 數據類型。 從 SQL Server 2022 (16.x) 開始,區段刪除功能會擴充到字串、二進位、GUID 資料類型,以及小數位數大於二的 datetimeoffset 資料類型。 區段消除不適用於 LOB 資料類型,例如 (max) 資料類型長度。

權限

所有數據行至少 VIEW DEFINITION 需要數據表的許可權。 除非使用者也有許可權,否則下列數據行會傳回NULLhas_nulls、、、min_data_idbase_idmagnitudemax_data_idnull_valueSELECT

目錄檢視中元數據的可見度僅限於用戶擁有的安全性實體,或用戶獲授與某些許可權的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration

範例

下列查詢會傳回數據行存放區索引區段的相關信息。

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

下一步