在单独的 1-1 表中拥有 varbinary 字段有什么好处?

2023-12-06

我需要将二进制文件存储在 SQL Server 2005 上的 varbinary(max) 列中,如下所示:

FileInfo

  • FileInfoId int,PK,身份
  • FileText varchar(max)(可以为空)
  • 文件创建日期日期时间等

文件内容

  • FileInfoId int、PK、FK
  • 文件内容 varbinary(最大)

FileInfo 与 FileContent 具有一对一的关系。 FileText 旨在在没有要上传的文件并且仅为项目手动输入文本时使用。我不确定有多少百分比的项目将拥有二进制文件。

我应该创建第二个表吗?两个表的设计会带来性能上的提升吗?有什么逻辑上的好处吗?

我找到了这一页,但不确定它是否适用于我的情况。


没有性能或操作优势。自 SQL 2005 起,LOB 类型为already引擎为您存储在一个单独的分配单元(一个单独的 B 树)中。如果你研究的是表和索引组织在 SQL Server 中,您将看到每个分区最多有 3 个分配单元:数据、LOB 和行溢出:

Table Organization
(source: s-msft.com)

LOB 字段(varchar(max)、nvarchar(max)、varbinary(max)、XML、CLR UDT 以及已弃用的类型 text、ntext 和 image)将在数据记录本身、聚集索引中仅包含一个占用空间非常小:指向 LOB 分配单元的指针,请参阅记录剖析.

通过将 LOB 显式存储在单独的表中你绝对一无所获。您只是增加了不必要的复杂性,因为以前的原子更新现在必须将自己分发到两个单独的表中,从而使应用程序和应用程序事务结构变得复杂。

如果 LOB 内容是整个文件,那么也许您应该考虑升级到 SQL 2008 并使用文件流.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在单独的 1-1 表中拥有 varbinary 字段有什么好处? 的相关文章

随机推荐

  • 有没有办法在 Microsoft Azure 存储资源管理器或 Azure 门户中查看托管磁盘的 blob?

    当我使用 Azure 资源管理器创建 VM 时不受管理的磁盘 我可以在其中查看其 vhd微软Azure存储资源管理器和 或 Azure 门户中名为 vhds 的子容器中指定存储帐户的 Blob 容器 当我使用 Azure 资源管理器创建 V
  • Internet Explorer 10 - 如何应用灰度滤镜?

    此 CSS 代码在 Internet Explorer 9 之前运行得非常好 img gray filter url data image svg xml utf8
  • Spring Boot 3.0.0 中抛出异常的 HttpStatus 未正确处理

    我刚刚迁移到 SpringBoot 3 0 0 但发现应用程序在抛出异常时无法正确处理 HttpStatus 它总是给出 403 FORBIDDEN 或为未经身份验证的请求配置的其他代码 似乎在捕获异常或其他原因后身份验证就会丢失 我在这里
  • 重载不能仅因返回类型而不同

    我正在尝试重载一个函数 因此当在其他地方使用该函数时 它将正确显示结果 即项目数组 void 或单个项目 getSelected type void getSelected type IDataItem getSelected type I
  • 默认的切片索引*真的*是多少?

    来自Python文档docs python org tutorial introduction html strings 切片索引有有用的默认值 省略的第一个索引默认为零 省略的第二个索引默认为被切片的字符串的大小 对于标准情况 这很有意义
  • 如果哈希码被覆盖,使其仅返回常量,那么 Hashmap 键将如何表现?

    我有一个关于Java的小问题Hashmap 如果我覆盖hashCode方法使得 Override public int hashCode return 9 这将导致所有HashMap键具有相同的索引 它们是否会被放置在映射中的链表结构中 或
  • Canvas 中的 onClickListener

    我正在开发一个应用程序 该应用程序以图像作为索引来选择活动将开始的特定图像 但我不知道如何在 Canvas 中设置 onClickListener 或 onTouchListener 这是我的代码 public class DrawView
  • Oracle 中的 TO_NUMBER 函数出现奇怪的问题

    如果记录数超过特定数量 n 则在 varchar2 列的 where 子句中执行 to number 函数时 我遇到间歇性问题 我使用 n 是因为没有发生这种情况的确切记录数 在一个 DB 上 它发生在 n 为 100 万之后 而在另一个
  • 连接耳机时如何将默认音频路由到耳机?

    我正在开发一个应用程序 其中我们只需要使用耳机插孔作为按钮 要求 连接耳机时通过耳机播放默认音频 通话 不需要通过耳机播放音频 有很多通过扬声器和耳机以及蓝牙耳机路由音频的示例 但没有关于在连接耳机时通过设备的耳机路由音频的示例 我已经尝试
  • 没有 www 则不会出现网络字体

    我试图到处寻找答案 我有一个唱歌网站www hugeone co uk 当地址类似于此链接 带有 www 时 一切正常 但是 如果我只输入hugeone co uk 网络字体就不会出现 并且我收到消息 跨源请求被阻止 同源策略不允许读取 远
  • Spring MVC 页面 HTTP 状态 400 和不正确的 URL

    我在使用该应用程序时遇到了一些问题 我有一个注册表单 该注册表单从控制器发布到另一个页面 该页面显示注册表中的查询结果 在结果页面上 我选择一条记录 它返回给我的是 数据到注册页面 用户应该能够在记录返回后更新记录或再次执行查询 我遇到的问
  • 使用java在mongodb上分页的最佳方法是什么

    我正在尝试通过下面的代码在 mongodb 中创建一个简单的分页 collection find skip n limit n 但是 如果我们看到在Java术语中 第一个find将返回所有记录 考虑到我有200万条记录 然后它将它传递给sk
  • 为 scatter3 图创建图例(Matlab)

    我有一个矩阵点X在 3 个维度中 X is a Nx3矩阵 并且这些点属于簇 它所属的簇由下式给出Nx1 vector Cluster 它的值如 1 2 3 所以 我正在绘制它scatter3像这样 scatter3 X 1 X 2 X 3
  • 将字符串拆分为行和列

    我有一根又长又大的绳子 mystr lt foo one undefined foo two undefined BAR three undefined 我想把它变成 x1 x2 x3 1 foo one undefined 2 foo t
  • 大型 TChart 需要很长时间才能绘制

    置顶帖子 我已经接受了答案 但它对我不起作用 我会发帖一个新问题 强调 Delphi 7 感谢所有提供良好意见的人 我在一小时内以一秒的间隔进行测量 我之前有一个问题 更新 TStringGrid 需要 45 秒 并设法将其降低到 比眼睛能
  • 在文件夹中使用“git clean”删除了其内容

    我试图在文件夹中使用 Git 然后我使用git glean df我发现一切都消失了 这是否意味着我丢失了文件 有什么方法可以找回它们吗 当你跑的时候git clean df you asked Git to 从工作树中删除未跟踪的文件 包括
  • 如何在 Swift 中解析具有类型相关子对象的 JSON 对象?

    我有以下 JSON 对象 type foo props word hello type bar props number 42 取决于存储的类型type 对象在props有不同的键 所以 我尝试了一些逻辑 struct MyObject C
  • Python Pygame 新手代码显示空白屏幕

    我执行以下代码 只得到一个空白 黑色 窗口 窗口标题显示 但我还没有加载图像 我也尝试使用除所使用的图像之外的其他图像 py 文件和图像位于同一目录中 background image filename checkmark jpg mous
  • 确定经过的时间

    我在 PHP 中有两次 我想确定经过的小时和分钟 例如 8 30 到 10 00 为 1 30 一个解决方案可能是使用strtotime将日期 时间转换为时间戳 first str 8 30 first ts strtotime first
  • 在单独的 1-1 表中拥有 varbinary 字段有什么好处?

    我需要将二进制文件存储在 SQL Server 2005 上的 varbinary max 列中 如下所示 FileInfo FileInfoId int PK 身份 FileText varchar max 可以为空 文件创建日期日期时间