我在sqlsever里存image,文件本身没多大,但发现数据库占的空间要数倍于实际image大小,不知何故?
注:除image列外,只有两三列常规列,所占空间可以忽略,

解决方案 »

  1.   

    IAMGE还是建议存储路径 因为数据库的占用空间不是实际的 IAMGE空间 IMAGE是先分配固定的空间
      

  2.   

    谢谢黛玉,但是我们这个应用肯定不能再改用文件方式了.image先分配固定空间也不应该是实际空间的好几倍吧
      

  3.   

    sp_spaceused 'fp_image'结果:
    name rows reserved data index_size unused
    fp_image 7240        6545968 KB 6544592 KB 336 KB 1040 KB应该已经不需要压缩了.
    保存的时候,每行image列的大小也就100k左右,不知为什么会大出这么多!
      

  4.   

    或许,你用了在数据行中存储 image 字符串的功能,这可能使数据库变大,建议取消该功能,用 sp_tableoption 存储过程取消 text in row 选项。
    如果你用了ms sql 2005,建议你改用 varbinary(max) 数据类型。
      

  5.   

    我用的是sqlserver2008,我新建的库和表,选中了自动收缩,往image列里写数据的时候,大小就是正常的,但用户已有的库的自动收缩是false,我改成true后,用了各种办法,原来这个表占据的数据也收缩不下来,不知有什么办法。用户那里已经有上万条数据,我不能再改varbinary(max)类型了吧,而且我试了一下,改了类型数据也收缩不下来。
    图片大小基本是固定的,不超过100k的
      

  6.   

    我特意跟踪了一下,我增加了一条记录,数据增长100k,再增加一条记录,数据就占了大约300k,相当于增加了200k容量,增加第三条的时候,已经占到大约600k了,这些都是实际数据占的空间,和预分配的空间无关。很是奇怪,如果新建库的时候选上自动收缩,没增加一条记录,确实固定增长100k,很正常。
    现在的问题是用户一万条数据已经占了好几个G空间了,如何收缩下来?急呀。谢过各位兄弟了
      

  7.   

    今天又新建了个库测了一下,就一个表,插了10条,
    sp_spaceused的结果:database_name database_size unallocated space
    sims40_tc_fp_test 6.00 MB 0.52 MBreserved data index_size unused
    4592 KB 3848 KB 664 KB 80 KB说明库实际已经占了5.5M,但表里数据只有3.8M,不知其它什么地方占了近2M的空间呀?????!!!!