【问题标题】:How do you determine the size of an index in SQL Server?如何确定 SQL Server 中索引的大小?
【发布时间】:2009-01-19 19:00:43
【问题描述】:

我有一个索引——我们称之为IX_MY_INDEX——在我想确定其大小的 SQL Server 表(兼容模式 80 和 90)中。我该怎么做?

更新: 以下艾伦拉隆德的第二个解决方案仅在兼容模式设置为 90 时有效;但是,我正在处理的特定数据库处于兼容模式 80。有人有兼容模式 80 的解决方案吗?

【问题讨论】:

    标签: sql sql-server indexing


    【解决方案1】:

    改编自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
    

    其中使用了下表:

    【讨论】:

      【解决方案2】:

      您可以像这样确定表(和其他东西)上所有索引的大小:

      EXEC sp_spaceused TableName;
      

      对于完整的细分,您可以:

      SELECT * 
      FROM sys.dm_db_index_physical_stats(db_id(), object_id('TableName'), null, null, 'DETAILED');
      

      【讨论】:

      • 非常感谢。您给出的第二个选项返回此错误:Msg 102, Level 15, State 1, Line 3 Incorrect syntax near '('.
      • 似乎查询失败,因为我处于 80 兼容模式。你有 90 兼容的解决方案吗?
      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 2010-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      相关资源
      最近更新 更多