SQL Server每行最多8KB?

时间:2010-12-08 13:05:48

标签: sql-server-2008 max capacity-planning

我刚刚读过Maximum Capacity Specification for SQL Server 2008并且每行最多看到8060字节 ?什么...每行只允许8KB? (是的,我看到“行溢出存储”特殊处理,我在谈论标准行为)

我在这里误解了什么吗?我确信我有,因为我确定我看到SQL Server数据库中存储了几个MB大小的二进制对象。这个不祥的每行是否真的意味着一行,一行,多列?

所以当我有三个nvarchar列,其中每个4000个字符(假设有三个法律文件写在文本框中......) - 服务器会发出警告?

2 个答案:

答案 0 :(得分:3)

是的,您将收到有关CREATE TABLE的警告,INSERT或UPDATE

上的错误

LOB类型(nvarchar(max),varchar(max)和varbinary(max)允许2Gb-1字节,这是你存储大块数据的方式,也是你以前见过的。

  • 对于单个字段> 4000字符/ 8000字节我使用nvarchar(max)

  • 对于一行中的3 x nvarchar(4000),我会考虑其中一个:

    • 我的设计错了
    • 一列或多列的nvarchar(max)
    • “最少填充”列的1:1子表

答案 1 :(得分:1)

2008将处理溢出,而在2000年,它只会拒绝插入溢出的记录。但是,最好还是考虑到这一点,因为大量的记录溢出可能会导致查询时出现性能问题。在您描述的情况下,我可能会考虑一个相关的表,其中包含用于文档类型的列,用于文档的大字段以及用于初始表的外键。但是,如果所有三列都填充在同一记录或最大值中,那么设计可能没问题。您必须知道您的数据以确定哪个是最佳的。另一个考虑因素是现在继续,直到遇到问题,然后用单独的文档表替换。您甚至可以通过重命名现有表并创建新表,然后使用从新结构中提取数据的现有表名创建视图来进行重构。这可能会使你的代码很多破坏,尽管你仍然需要调整任何插入或更新语句。