7

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

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

一位同事的第一个想法是添加一个新表来仅保存 BLOB,并在第一个表中使用(可为空的)外键。他预测这将在查询第一个表时带来性能优势。

我的想法是,将 BLOB 直接存储在原始表中更合乎逻辑且更容易。我们的查询都不是SELECT *从该表执行的,所以我的直觉是直接存储它不会有显着的性能开销。

我将对这两种选择进行基准测试,但我希望一些 SQL 专家能从经验中得到任何建议。

使用 MSSQL 和 Oracle。

4

1 回答 1

5

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

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

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

于 2009-04-21T13:17:47.030 回答