You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用SSMS查询Dataverse表的索引大小?

查询Dataverse表的索引大小方法

因为Dataverse(原Dynamics 365 CE)底层数据库有特殊元数据结构,常规SQL索引大小查询语句需要适配其表命名规则和系统视图,以下是两种在SSMS中有效的查询方式:

方法一:使用sys.dm_db_index_physical_stats函数

该函数可返回索引的详细物理统计信息,包括占用空间大小:

SELECT 
    OBJECT_NAME(s.object_id) AS 表名,
    i.name AS 索引名称,
    s.index_id AS 索引ID,
    CAST(s.total_page_count * 8 / 1024.0 AS DECIMAL(10,2)) AS 总大小(MB),
    CAST(s.used_page_count * 8 / 1024.0 AS DECIMAL(10,2)) AS 已使用大小(MB),
    CAST(s.data_pages * 8 / 1024.0 AS DECIMAL(10,2)) AS 数据页大小(MB)
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID('SalesOrderBase'), NULL, NULL, 'DETAILED') s
JOIN 
    sys.indexes i ON s.object_id = i.object_id AND s.index_id = i.index_id
ORDER BY 
    总大小(MB) DESC;

说明:

  • 将SalesOrderBase替换为目标实体对应的SQL表名:系统实体通常是[实体架构名]Base(比如SalesOrderDetailBase),自定义实体为new_[自定义实体名]Base
  • DETAILED参数返回最详细统计,若追求速度可改为SAMPLING或LIMITED

方法二:通过系统视图关联计算

结合sys.indexes、sys.partitions和sys.allocation_units视图,汇总索引占用空间:

SELECT 
    OBJECT_NAME(i.object_id) AS 表名,
    i.name AS 索引名称,
    i.index_id AS 索引ID,
    SUM(a.total_pages) * 8 / 1024.0 AS 总大小(MB),
    SUM(a.used_pages) * 8 / 1024.0 AS 已使用大小(MB),
    SUM(a.data_pages) * 8 / 1024.0 AS 数据页大小(MB)
FROM 
    sys.indexes i
JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    OBJECT_NAME(i.object_id) IN ('SalesOrderBase', 'SalesOrderDetailBase', 'new_你的自定义表Base')
GROUP BY 
    i.object_id, i.name, i.index_id
ORDER BY 
    总大小(MB) DESC;

说明:

  • 通过IN子句可同时查询多个表的索引信息,方便对比系统表和自定义表
  • 结果按索引大小降序排列,便于快速定位占用空间最大的索引

对比建议

若要对比系统表(含索引)和自定义表(无索引)的总占用:

  1. 对系统表,将所有索引的总大小(MB)求和,再加上表的数据大小(可通过查询sys.tables结合sys.allocation_units获取)
  2. 对自定义表,直接查询其数据大小即可,因为尚未生成索引

内容的提问来源于stack exchange,提问作者strattonn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:44:52