频繁查询表或单独表中的LOB

Dan*_*iel 1 sql-server sql-server-2012 blob relations

我在 Microsoft SQL Server 2012 服务器中有一个名为 FinTrans 的表,在任何给定时间都有大约 10K-30K 条记录,每天插入和删除大约 2K 条记录。

该表有 3nvarchar(max)列,用于保存事务的可能错误消息(3 种不同类型的消息,因此是单独的列)。每当列出表的内容时,nvarchar(max)也会读取这些列。列是nvarchar(max)因为它们的内容可能会超过 4K,但是机会很小(也许每周有一个记录)。

在这种情况下,最好将此列存储在与 FinTrans 表具有 1:1 关系的单独表中,还是我应该将列留在原处?

Dav*_*oft 5

将此列存储在与 FinTrans 表具有 1:1 关系的单独表中更好,还是我应该将列留在原处?

别管它。这很小,不值得增加复杂性。此外,即使表和 LOB 都更大,答案仍然是保留它。大型 LOB 将移出该行,您可以为所有 LOB 设置一个配置选项以将其存储在行外。您还可以为要存储在单独文件组中的 LOB 配置表。所以没有理由在这里改变逻辑模型。

看:

行外大值类型

1 = 表中的 varchar(max)、nvarchar(max)、varbinary(max)、xml 和大型用户定义类型 (UDT) 列存储在行外,具有指向根的 16 字节指针。

0 = varchar(max)、nvarchar(max)、varbinary(max)、xml 和大 UDT 值直接存储在数据行中,最多 8000 字节,只要该值可以放入记录即可。如果该值不适合记录,则将指针存储在行内,其余部分存储在 LOB 存储空间中的行外。0 是默认值。

来自sp_tableoption