Sql server 如何在SQL中测量表中的表大小(GB)

Sql server 如何在SQL中测量表中的表大小(GB),sql-server,size,double,Sql Server,Size,Double,@Morawski说“一个包含1000列和44000行的表大约有330MB;这是浏览器只需打开几个选项卡就可以使用的大小” 表必须告诉多少列和行其大小为10 GB (旋转表格时只有两个值) @Morawski是如何得出1000列和44000列为330MB的结论的 是否有任何脚本可以在SQL中说明这一点?使用了存储过程调用sp\u spaceused。不知道这是否是@Morawski使用的,但作为我手头上的一个开发数据库示例: exec sp_spaceused 'aspnet_users' 给

@Morawski说“一个包含1000列和44000行的表大约有330MB;这是浏览器只需打开几个选项卡就可以使用的大小”

表必须告诉多少列和行其大小为10 GB (旋转表格时只有两个值)

@Morawski是如何得出1000列和44000列为330MB的结论的


是否有任何脚本可以在SQL中说明这一点?

使用了存储过程调用sp\u spaceused。不知道这是否是@Morawski使用的,但作为我手头上的一个开发数据库示例:

exec sp_spaceused 'aspnet_users'
给予


不确定TSQL脚本(我确定它存在),但您可以通过UI(SSMS)找到它,如下所示:

1) 右键单击表格
2) …属性
3) …存储选项卡

从那里,它会告诉你“数据空间”和“索引空间”——所以如果你想要一个总的足迹,就把它们加起来

编辑
如果要查找表的总占用面积,也要考虑日志空间。


下面是@jon答案中列出的存储过程的信息。此外,它还引用了sys视图,您可以在其中直接查询空间使用情况数据

SQL Server的容量规划有精确的公式:

使用1000列固定长度的双倍(即SQL类型,8字节的存储空间),您的行接近最大行大小限制,但它实际上适合页面。44k行需要44k页(由于行的大小很大,每页只能容纳一行),也就是说,一页需要8kb,44000*8kb=~344MB。如果您有一个聚集索引,它的大小会根据键的大小而增加,请参阅上面的第一个链接

但是1000列的表设计是一种巨大的代码气味。关于数据库部分,您的问题非常模糊,您之前的问题从未提到数据库,而是关于内存数组,如果将这两个问题加在一起,就没有多大意义了


也许您有兴趣阅读about、about或about.

数据库中的所有表


sp_msforeachtable'exec sp_spaceused[?]”

在上一个问题中,所有列都包含双精度。这对计算非常重要。是否可以使用此存储过程来获取所有表使用的空间?您是指作为一个整体(总计)还是单独?单独。我的意思是,使用这个存储过程可以得到所有表的列表,以及每个表所使用的大小和空间。这值得一个新问题。在这里发布并链接,我会跟进。为了获得更好的性能,请将光标
设置为STATIC
将tt光标声明为STATIC For…
name          rows    reserved     data      index_size     unused
------------- ------- ------------ --------  ------------   ---------- 
aspnet_Users  3       48 KB        8 KB      40 KB          0 KB
-- Measures tables size (in kilobytes)
-- Tested in MS SQL Server 2008 R2

declare @t table (
name nvarchar(100), [rows] int, [reserved] nvarchar(100), [data] nvarchar(100), [index_size] nvarchar(100), [unused] nvarchar(100)
)
declare @name nvarchar(100)

declare tt cursor for
Select name from sys.tables
open tt

fetch next from tt into @name
while @@FETCH_STATUS = 0
begin
  insert into @t
  exec sp_spaceused @name
  fetch next from tt into @name
end

close tt
deallocate tt

select name as table_name, [rows] as rows_count, data + [index] as total_size, data as data_size, [index] as index_size
from (select name,
[rows],
cast (LEFT(data, LEN(data)-3) as int) data,
cast (LEFT(index_size, LEN(index_size)-3) as int) [index]
 from @t
) x
order by 3 desc, 1