适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Microsoft Fabric 中的 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。 可以使用 |
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 的基值 ID。 如果未使用编码类型 1, base_id 则设置为 -1。 |
magnitude |
float | 如果使用编码类型 1,则数量级。 如果未使用编码类型 1, magnitude 则设置为 -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 | 创建段时的当前排序规则。 映射到内部 ID。 仅供内部使用。 适用于: SQL Server 2022(16.x)及更高版本、Azure SQL 数据库和 Azure SQL 托管实例 |
min_deep_data |
varbinary(18) | 用于段消除。1 仅供内部使用。 适用于: SQL Server 2022(16.x)及更高版本、Azure SQL 数据库和 Azure SQL 托管实例 |
max_deep_data |
varbinary(18) | 用于段消除。1 仅供内部使用。 适用于: SQL Server 2022(16.x)及更高版本、Azure SQL 数据库和 Azure SQL 托管实例 |
1 升级到支持扩展数据类型集(在 SQL Server 2022(16.x 中引入)的数据库引擎版本后, min_deep_data 并且 max_deep_data 一直 NULL 使用 ALTER INDEX ... REBUILD 或 CREATE INDEX ... WITH (DROP_EXISTING = ON) 语句重新生成列存储索引。
注解
数据库引擎通过分析段数据来选择列存储段编码类型,目标是实现最低的存储成本。 如果数据大多不同,则数据库引擎使用基于值的编码。 如果数据大多不不同,则数据库引擎使用基于哈希的编码。 基于字符串的编码和基于值的编码的选择与所存储的数据类型(无论是字符串数据还是二进制数据)相关。 所有编码都尽可能利用位打包和运行长度编码。
列存储段消除适用于数值、日期和时间数据类型,以及刻度小于或等于 2 的 datetimeoffset 数据类型。 从 SQL Server 2022(16.x)开始,段消除功能扩展到字符串和二进制数据类型、 uniqueidentifier 数据类型以及用于缩放大于 2 的 datetimeoffset 数据类型。 段消除不适用于 LOB 数据类型,例如 varchar(max)、nvarchar(max)和 varbinary(max)。 有关详细信息,请参阅 列存储索引中的新增功能。
权限
VIEW DEFINITION需要对视图拥有权限。 除非用户还具有权限,否则以下列将返回NULL:has_nulls、、base_id、min_data_idmagnitude、 max_data_id和null_value。SELECT
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 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;