none
sqlserver2008 表 存储空间 RRS feed

  • 问题

  • sql2008 标准版中有个表,上百个字段,大部分都是numeric(10,2)类型,三十万条记录,占用存储空间300M,修改其中一个字段为numerice(12,2),竟然发现此表的存储空间一下上涨到600M,于是百般设置,发现使用select into 语句将此表(未修改字段前)的数据全场创建到一个新表中,新表同样是600M,或者对此表的主键索引重新生成,也会变成600M,十分纳闷,怎么会这样, 求解,怎样修改字段精度后,容量不增加
    2011年5月30日 10:32

全部回复

  • numeric精度要是从9增加到10,容量是会从5字节到9字节,但是10和12应该是一样的。

    如果你希望节省容量,可以考虑行压缩。


    想不想时已是想,不如不想都不想。
    2011年5月30日 16:28
    版主
  • 所以我很纳闷,按帮助上说,numeric(10, 2)的精度为12,存储为9个字节,numeric(12,2)的精度为14,存储同样为9个字节。

    现在不是改变精度的问题,我把这个表复制到一张新表(和原表的列类型完全一样)里,同样也是600M,我就特别纳闷,这个表数据生成是陆续插入的,而新表是使用select into创建的,数据完全一样,为什么容量会这么大呢


    2011年5月31日 2:35
  • 一般地,select into会更小。

    建议你检查原表是否有压缩。另外,你是怎么看表占用的存储空间的?


    想不想时已是想,不如不想都不想。
    2011年5月31日 4:44
    版主
    • 在sqlserver2008自带的管理工具里,右键单击表后选择属性,弹出表属性窗口,左侧选择“存储”项,由边有一项叫“数据空间”,这个属性指示的就是表的存储量。
    • 原表应该没有压缩,也是普通的创建方式,再说是标准版,好象就不支持表压缩之类的
    • 为什么能发现这个问题呢,因为之前数据库备份一直是300多M,有一天改了精度后,再以备份就发现变成600多M了,然后就找原因,最后发现这个表的存储容量变化特别大
    2011年6月2日 3:43
  • 你好,

    你能否把表的结构贴出来并给出一些示例数据啊?

    正如楼上讨论的,应该不是numeric 精度所引起的。

     

    Thanks,
    Ai-hua Qiu


    Ai-hua Qiu
    2011年6月2日 7:59
  • 你可以用sp_spacec 'tablename'来查看一下这个表中的剩余空间有多少。
    2011年6月7日 8:54
  • sql2008 标准版中有个表,上百个字段,大部分都是numeric(10,2)类型,三十万条记录,占用存储空间300M,修改其中一个字段为numerice(12,2),竟然发现此表的存储空间一下上涨到600M,于是百般设置,发现使用select into 语句将此表(未修改字段前)的数据全场创建到一个新表中,新表同样是600M,或者对此表的主键索引重新生成,也会变成600M,十分纳闷,怎么会这样, 求解,怎样修改字段精度后,容量不增加
    新表也是这么大,那说明并不是因为你这个numeric的修改导致的,你其他的字段呢?上百个字段啊,确认其他字段没变?

    If you think my suggestion is useful, please rate it as helpful.
    If it has helped you to resolve the problem, please Mark it as Answer.
    http://twitter.com/7Kn1ghts

    2011年6月7日 9:20