我正在使用此查询来更深入地查看我的列存储索引,同时对我的执行计划进行 t-shooting(即段消除等):
SELECT
tables.name AS table_name,
indexes.name AS index_name,
columns.name AS column_name,
partitions.partition_number,
column_store_segments.segment_id,
column_store_segments.min_data_id,
column_store_segments.max_data_id,
column_store_segments.row_count
FROM sys.column_store_segments
INNER JOIN sys.partitions
ON column_store_segments.hobt_id = partitions.hobt_id
INNER JOIN sys.indexes
ON indexes.index_id = partitions.index_id
AND indexes.object_id = partitions.object_id
INNER JOIN sys.tables
ON tables.object_id = indexes.object_id
INNER JOIN sys.columns
ON tables.object_id = columns.object_id
AND column_store_segments.column_id =
columns.column_id
WHERE tables.name = 'R***'
ORDER BY tables.name, columns.name,
column_store_segments.segment_id;
(表名已编辑)。
分析结果如下: Postimg。
我的问题很简单:为什么分析的结果与索引中的列名不对应?正如您在图像右侧看到的那样,结果网格上的列名与列存储索引属性中显示的不同。
环境:SQL 2019 CU10 标准;视窗服务器 2019。
提前感谢您的反馈,请注意 S。
作为列存储系统目录视图一部分的
column_id
字段:sys.column_store_segments
资源
不同于
column_id
系统目录视图中的字段:sys.columns
资源
如果您想知道 SSMS 在后台运行什么,您可以随时设置扩展事件来在选择索引属性时捕获查询。SSMS 使用的查询以正确的顺序显示索引和列的属性:
在这里,我们看到使用了中间系统目录视图
sys.index_columns
。知道了这一点,您最终调整后的查询可能是这样的: