【发布时间】:2009-01-19 19:00:43
【问题描述】:
我有一个索引——我们称之为IX_MY_INDEX——在我想确定其大小的 SQL Server 表(兼容模式 80 和 90)中。我该怎么做?
更新: 以下艾伦拉隆德的第二个解决方案仅在兼容模式设置为 90 时有效;但是,我正在处理的特定数据库处于兼容模式 80。有人有兼容模式 80 的解决方案吗?
【问题讨论】:
标签: sql sql-server indexing
我有一个索引——我们称之为IX_MY_INDEX——在我想确定其大小的 SQL Server 表(兼容模式 80 和 90)中。我该怎么做?
更新: 以下艾伦拉隆德的第二个解决方案仅在兼容模式设置为 90 时有效;但是,我正在处理的特定数据库处于兼容模式 80。有人有兼容模式 80 的解决方案吗?
【问题讨论】:
标签: sql sql-server indexing
改编自How to Find Size of All the Indexes on the Database上的帖子,您可以使用:
SELECT OBJECT_SCHEMA_NAME(i.OBJECT_ID) AS SchemaName,
OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.[name] AS IndexName,
i.index_id AS IndexID,
8 * SUM(a.used_pages) AS [Indexsize(KB)]
FROM sys.indexes i
JOIN sys.partitions p ON p.OBJECT_ID = i.OBJECT_ID AND p.index_id = i.index_id
JOIN sys.allocation_units a ON a.container_id = p.partition_id
GROUP BY i.OBJECT_ID, i.index_id, i.[name]
ORDER BY OBJECT_NAME(i.OBJECT_ID), i.index_id
其中使用了下表:
【讨论】:
您可以像这样确定表(和其他东西)上所有索引的大小:
EXEC sp_spaceused TableName;
对于完整的细分,您可以:
SELECT *
FROM sys.dm_db_index_physical_stats(db_id(), object_id('TableName'), null, null, 'DETAILED');
【讨论】: