【问题标题】:How much disk space do SQL Columns useSQL 列使用多少磁盘空间
【发布时间】:2017-03-06 19:21:07
【问题描述】:

有人知道我可以找到这些东西的链接吗?我正在制定一项建议,从几个表中删除一大堆未使用的列,如果我能找出已使用的磁盘空间量,那真的会帮到我。

例如,如果我有一个包含 550 万行的表,如果我删除 BIT/INT32/DECIMAL (18,2) 列,我将节省多少空间?

这是 SQL Server 2008。

再次感谢!

【问题讨论】:

  • 我会说“创建数据库的副本,从有问题的表中删除列,然后获取大小差异”,但如果数据库是那样的话,这可能有点不可行大。
  • 是的,这有点像我的后备计划。我遇到的问题是我们的“开发”数据库是我们生产数据库的精简版;开发时为 1 GB,而实际生产接近 5 或 6 GB

标签: sql-server-2008 diskspace


【解决方案1】:

这段 sql 遍历了所有列,并为您提供了它们的 datalength() 的聚合。

我意识到这并不是 OP 所要求的——它是为了那些谷歌“使用的 sql server column space used”并找到这个问题的可怜人的利益。

它也在my gist here

create table #space ([table] nvarchar(255), [column] nvarchar(255) not null, [bytes] bigint null);

declare @sql varchar(max) = ''
declare @tablepattern as varchar(255) = '%'
declare @exclusionpattern as varchar(255) = ''

select @sql = @sql + 'insert into #space select ''' + t.name + ''', ''' + c.name + ''', sum(datalength([' + c.name + '])) as bytes from [' + t.name + '];' 
from sys.columns c
inner join sys.tables t on c.object_id = t.object_id
where t.name like @tablepattern and t.name not like @exclusionpattern;

exec (@sql)

select [table], format(sum([bytes]), '#,#') as [size]
from #space
group by [table]
order by sum(bytes) desc;

select [table], [column], format([bytes], '#,#') as [size]
from [#space]
order by [bytes] desc;

drop table #space

【讨论】:

    【解决方案2】:

    列分配和实际记录分配有很大区别。

    对于类型:

    但在现实世界中,这些列被分组以使用一些对齐规则进行记录。记录由大页面分配,可以包含数千条记录。磁盘空间也受到事务日志的影响——部分保存了一些记录。因此很难推断出列大小的线性相关性。

    【讨论】:

      【解决方案3】:

      这是每行

      对于数字:

      tinyint  1 byte
      smallint 2 bytes
      int      4 bytes
      bigint   8 bytes
      

      Bit 汇总在整个记录中,因此在不知道您的结构的情况下很难说。不太可能节省很多。

      DECIMAL 将取决于精度:

      1 - 9   5 bytes
      10 - 19 9 bytes
      20 - 28 13 bytes
      29 - 38 17 bytes
      

      【讨论】:

        猜你喜欢
        • 2018-07-22
        • 2013-07-04
        • 2020-09-15
        • 2019-06-10
        • 2015-04-05
        • 1970-01-01
        • 2016-10-04
        • 1970-01-01
        • 2014-06-29
        相关资源
        最近更新 更多