我正在设计一个架构,某些成员可以上传图像(基于权限)。我打算使用varbinary(max)
列进行此操作。
在以下两个设计之间需要考虑的存储和性能影响是什么(除了明显的后者是一对多 - 可以很容易地限制)。
varbinary(max)
列Members
,另一个用于Pictures
显然,额外的左连接会降低性能,但如果我使用单表方法,这将需要更多的存储空间(我通常不会考虑存储大小过于担心性能但是对于这个项目我有相当严格的限制与我的托管服务提供商)。
答案 0 :(得分:2)
可空的列变量长度为NULL,表中不占空格。
当您存储BLOB时,它可能存储在行内或行外,具体取决于大小等。这适用于1或2个表
如果你有一个单独的表,你还需要存储保留成员的主键(或者它有自己的密钥,成员中的FK)。但是,与图片尺寸相比,这是微不足道的。
就个人而言,我会使用一个表来保持简单。
除非,比方说,我想使用FILESTREAM,或使用不同的文件组获得BLOB。
答案 1 :(得分:1)
将图像存储在同一个表中。将它们存储在单独的表格中没有任何存储或速度优势,除非您有 zillions 成员,其中10个会有图片。
由于sql server的值为NULL,因此它根本不存储可空变量列 - 您甚至可以比较两个表设计获得速度优势
如果您的图片足够大(例如 - 超过1 Mb),请考虑使用FILESTREAM列。它允许将图像存储为文件,从而加快了读写操作,但具有备份一致性。
答案 2 :(得分:0)
更好的选择...将图像存储在磁盘上,并在Members表中添加带文件名(路径)的可空字段。