我在几个字段上建立了一个非聚集索引。现在如何查看索引中每个键的大小,或者这只是我在索引中使用的字段字节大小的总和?
谢谢托马斯
它在我期望的表中的行中。如果我是正确的行总是包含所有数据和索引,只会增加开销。由于您没有说明您使用的是哪个数据库,因此结果可能会有所不同。
我假设您是在 SQL Server 中执行此操作的 - 它在特殊的系统视图和表中提供了大量信息,我在下面展示了这些信息。
至少这个查询会给你总大小(包括行数据和大对象(varbinaries/images),但也有一些单独的。我复制了这个,所以请耐心等待,但将 partition_stats.* 添加到选择列表中,您将获得单独的统计信息至少对于 blob 和行数据..你做数学)
SELECT
in_row_data_page_count * 8 / 1024 RowDataSizeMB,
in_row_used_page_count * 8 / 1024 RowSizeMB,
sys_schemas.name AS SchemaName
,sys_objects.name AS TableName
,sys_indexes.name AS IndexName
,sys_indexes.type_desc AS IndexType
,partition_stats.used_page_count * 8 AS TotalSizeKB
,CAST(partition_stats.used_page_count * 8 / 1024.00 AS Decimal(10,3))AS TotalSizeMB
,CAST(partition_stats.used_page_count * 8 / 1048576.00 AS Decimal(10,3)) AS TotalSizeGB
FROM sys.dm_db_partition_stats partition_stats
INNER JOIN sys.indexes sys_indexes
ON partition_stats.[object_id] = sys_indexes.[object_id]
AND partition_stats.index_id = sys_indexes.index_id
AND sys_indexes.type_desc <> 'HEAP'
INNER JOIN sys.objects sys_objects
ON sys_objects.[object_id] = partition_stats.[object_id]
INNER JOIN sys.schemas sys_schemas
ON sys_objects.[schema_id] = sys_schemas.[schema_id]
AND sys_schemas.name <> 'SYS'
--WHERE partition_stats.[object_id] = object_id('dbo.TableName')
ORDER BY 1,2,3,4
虽然我不是专家 - 例如查看此链接以获取更多信息,包括更多 SQL 语句......
http://www.sqlservercentral.com/Forums/Topic404843-793-1.aspx#bm568295