1

我在几个字段上建立了一个非聚集索引。现在如何查看索引中每个键的大小,或者这只是我在索引中使用的字段字节大小的总和?

谢谢托马斯

4

1 回答 1

0

它在我期望的表中的行中。如果我是正确的行总是包含所有数据和索引,只会增加开销。由于您没有说明您使用的是哪个数据库,因此结果可能会有所不同。

我假设您是在 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

于 2013-07-25T04:04:30.953 回答