向表中添加BLOB字段的性能开销

Mar*_*Pim 7 sql-server oracle performance blob

我试图在两种可能的实现之间做出决定,我渴望选择最好的一种:)

我需要向表中添加一个可选的BLOB字段,该表当前只有3个简单字段.据预测,新字段的使用率将低于10%,甚至可能低于5%,因此对于大多数行来说它将为空 - 事实上,我们的大多数客户可能永远不会有任何BLOB数据.

同事的第一个倾向是添加一个新表来保存BLOB,在第一个表中有一个(可为空的)外键.他预测在查询第一个表时会有性能优势.

我的想法是,将BLOB直接存储在原始表中更合乎逻辑,也更容易.我们的查询都没有SELECT *从该表中进行,因此我的直觉是直接存储它不会产生显着的性能开销.

我将对两种选择进行基准测试,但我希望一些SQL专家可以从经验中获得任何建议.

使用MSSQL和Oracle.

Ste*_*ven 5

对于MSSQL,blob将存储在数据库中的单独页面上,因此如果列为null,它们不应影响性能.

如果使用IMAGE数据类型,则数据始终存储在行外.如果使用varbinary(max)数据类型,那么如果数据> 8kb,则它将存储在行外,否则可能会根据表选项存储在行中.

如果您只有几行blob,则性能不会受到影响.