代码之家  ›  专栏  ›  技术社区  ›  Mark Pim

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

  •  6
  • Mark Pim  · 技术社区  · 16 年前

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

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

    一位同事的第一个倾向是添加一个新表来只保存blob,第一个表中有一个(可为空的)外键。他预测,在查询第一个表时,这将对性能有好处。

    我的想法是,直接将BLOB存储在原始表中更合理、更容易。我们的问题都没有 SELECT * 根据该表,我的直觉是,直接存储它不会带来显著的性能开销。

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

    使用MSSQL和Oracle。

    1 回复  |  直到 16 年前
        1
  •  5
  •   Steven    16 年前

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

    如果使用图像数据类型,则数据始终存储在行外。 如果使用varbinary(max)数据类型,则如果数据为>8kb存储在行外部,否则可能存储在行中,具体取决于表选项。

    如果只有几行包含blob,则性能不应受到影响。