使用以下查询,我可以获得表的索引大小:
SELECT
i.name AS IndexName,
SUM(page_count * 8) AS IndexSizeKB
FROM sys.dm_db_index_physical_stats(db_id(), object_id('schema.table'), NULL, NULL, 'DETAILED') AS s
JOIN sys.indexes AS i
ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
GROUP BY i.name
ORDER BY i.name
如果我执行sp_spaceused 'schema.table'
没有索引的大小是否对应于data
列?
有什么方法可以在 sql server 中获取没有索引的表的大小?(SELECT
语句会很好,因为我想将此查询插入到更大的查询中)。
如果我执行Get size of all tables in database,表的大小与索引的大小几乎相同(表明有问题)。
有多种方法可以在数据库中查找表的大小。第一种也是最简单的方法是右键单击表并检查存储选项卡,这将为您提供数据空间和索引空间。数据空间只不过是表中数据的大小,类似地,索引空间为您提供了上述表中的索引大小。
上述信息将与命令完全匹配
sp_spaceused 'schema_name.table_name'
我们可以对用户表(在 dbo 模式和 StackOverFlow 数据库中)进行交叉检查。在这里,如果您添加数据、索引大小和未使用(以 KB 为单位),您将获得按表保留的空间。
您还可以通过运行命令 sp_blitzindex(来自 Brent Ozar 先生)来检查表和索引的大小。命令如下:
在这里,您可以检查大小列。聚集索引大小将为您提供表大小,您还可以找到每个索引的大小以及它们的用法(如果有兴趣)。
此外,您还可以通过进入报告来检查所有表格的大小,如下所示:
您还可以在 select语句下面运行以获取所有表的完整大小和索引大小:
如果您只想要表格大小,请执行以下操作:
希望这可以帮助。
DMV 返回你想要的信息,你只需要知道 index_id = 0 是针对 Heaps 的,而 Index_id 1 是针对聚集索引的
正是这些在 sp_spaceused 的输出中报告为数据
使用临时数据库
创建表堆(id int identity(1,1), txt nvarchar(max) default 'hahaha')
插入堆(txt)值('one')
select object_name(object_id) as objname, * FROM sys.dm_db_index_physical_stats(db_id(), object_id('schema.table'), NULL, NULL, 'DETAILED') AS s where index_id = 0