2013-07-25 49 views
1

我在幾個字段上構建了非集羣索引。現在我該如何查看索引中每個鍵的大小,還是僅僅是我在索引中使用的字段字節大小的總和?索引中單個鍵的大小

感謝 托馬斯

+0

您的索引中使用的列的大小總和***加***(在葉級別上)**聚簇索引列的大小**(如果已在桌面上定義了這些列) –

回答

0

這是在我所期望的表中的行。如果我是正確的行總是包含所有的數據和索引只是增加開銷。由於您沒有說明您正在使用哪個數據庫,因此結果可能會有所不同。

我假設你在SQL Server中這樣做 - 它在特殊系統視圖和表格中獲得了很多信息,我在下面展示了一個視圖。

至少這個查詢會給你總的大小(包括行數據和大對象(varbinaries/images),但也有一些單獨的。我複製這個,讓我忍受,但添加 partition_stats。*,到選擇列表和你將獲得至少單獨統計斑點和行data..you做數學)

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

+0

謝謝,我之前做過類似的事情。我的索引是148424412 KB或150 GB的大小。但是,索引中的字段大小爲int,nvarchar 100個字節,然後我包含另一個int。這總計爲108個字節。我有20億行,提供216億字節或216 GB。這216 GB應該是下限。我認爲nvarchar(100)正在做某事sneeky。有什麼方法可以準確地嘗試建立我的索引鍵的大小? – Prof