sys.column_store_segments (Transact-SQL)

适用于: SQL Server 2012(11.x)及更高版本Azure SQL 托管实例

为列存储索引中的每个列段返回一行。 每个行组每个列有一个列段。 例如,包含 10 行组和 34 列的表返回 340 行。

列名称 数据类型 说明
partition_id bigint 指示分区 ID。 在数据库中是唯一的。
hobt_id bigint 具有此列存储索引的表的堆或 B 树索引(HoBT)的 ID。
column_id int 列存储列的 ID。
segment_id int 行组的 ID。 为了向后兼容,即使这是行组 ID,列名称仍会继续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 1 如果列段具有 Null 值。
base_id bigint 如果使用编码类型 1 的基值 ID。 如果未使用编码类型 1,则base_id设置为 -1。
magnitude float 如果使用编码类型 1,则数量级。 如果未使用编码类型 1,则数量级设置为 -1。
primary_dictionary_id int 值为 0 表示全局字典。 值为 -1 表示没有为此列创建全局字典。
secondary_dictionary_id int 非零值指向当前段(例如行组)中此列的本地字典。 值为 -1 表示此段没有本地字典。
min_data_id bigint 列段中的最小数据 ID。
max_data_id bigint 列段中的最大数据 ID。
null_value bigint 用于表示 Null 的值。
on_disk_size bigint 段大小(字节)。
collation_id int 适用于 SQL Server 2022(16.x) 及更高版本。
创建段时的当前排序规则。 映射到内部 ID。 目前仅供内部使用,不用于开发。
min_deep_data varbinary(18) 适用于 SQL Server 2022(16.x) 及更高版本。
用于段消除。1 仅供内部使用。
max_deep_data varbinary(18) 适用于 SQL Server 2022(16.x) 及更高版本。
用于段消除。1 仅供内部使用。

1 升级到支持字符串 min/max 段消除的 SQL Server 版本(SQL Server 2022 (16.x) 及更高版本后, min_deep_data max_deep_data 将使用 NULL REBUILD 或 DROP/CREATE 重新生成列存储索引之后。 重新生成后,包含可受益于字符串 min/max 段消除的数据类型的段将包含数据。

注解

列存储段编码类型由数据库引擎选择,目标是通过分析段数据来实现最低的存储成本。 如果数据大多不同,则数据库引擎使用基于值的编码。 如果数据大多不不同,则数据库引擎使用基于哈希的编码。 基于字符串的编码和基于值的编码的选择与所存储的数据类型(无论是字符串数据还是二进制数据)相关。 所有编码都尽可能利用位打包和运行长度编码。

列存储段消除适用于数值、日期和时间数据类型,以及刻度小于或等于 2 的 datetimeoffset 数据类型。 从 SQL Server 2022 (16.x) 开始,段消除功能扩展到字符串、二进制文件、guid 数据类型以及用于小数位数大于 2 的 datetimeoffset 数据类型。 段消除不适用于 LOB 数据类型,如 (max) 数据类型长度。

权限

所有列至少 VIEW DEFINITION 需要对表具有权限。 除非用户还具有权限,否则以下列将返回NULLhas_nulls、、base_idmagnitudemin_data_idmax_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

后续步骤