从Image到Varbinary(最大)

时间:2011-04-14 15:06:01

标签: sql sql-server sql-server-2005

使用SQL 2005

我有一个包含5列的表

ID - int 
Param - smallint 
Data1 - image 
Data2 - image
Data3 - image

图像大小可以小到20个字节,可以大到1MB(是的,大于8k)。图像的大小不是恒定的,因为它保存压缩数据。 BLOB的大部分日期约为512B至1.5kB。 Data1,Data2和Data3之间存在逻辑关系,这是它们存储在一起的原因。在拥有3年历史数据的数据库中,有66个百万记录。

努力改进数据存储并使系统为未来的SQL版本做好准备。我想将图像列更改为varbinary(MAX)数据类型。 FILESTREAM将是另一种可能性,但我不确定持有约2亿个文件会更有效。

将图像更改为varbinary(max)之后,我注意到表的整体大小已经缩小(只是一点点),但每次添加/删除数据都需要更长的时间才能完成。

根据我的理解,如果varbinary(max)值小于8k,它将被放置在表内,而如果它大于8k则将其放在其他地方,并且指向该数据的指针存储在表中。使用图像时,即使图像数据小于8k,也会存储指针。

通常,每天添加和删除20000条记录,因此没有太多的数据添加/删除,单个选择通常在10-200个连续记录中。

有没有办法设置varbinary(max)数据总是(无论大小)存储在表格之外,与图像的存储方式相同?

1 个答案:

答案 0 :(得分:4)

您可以使用sp_tableoption设置“超出行的大值类型”

Some additional info