我正在尝试编写一个小型博客引擎。我很想找到一个示例SQL Server架构给我一些想法,但还没有找到一个。
我想有一个博客表,允许我存储超过8000字节的数据。任何人都可以告诉我,如果有一个好的方法可以使用这样的两个字段:
CREATE TABLE [Blog](
[BlogId] [int] IDENTITY(1,1) NOT NULL,
[BlogText1] [nvarchar](8000) NOT NULL,
[BlogText2] [nvarchar](8000),
..
我想的是将文本存储在两个字段中,让我的应用程序在显示数据时附加两个字段的内容,当存储数据时,第一个xxx字符存储在BlogText1中,然后存储在BlogText2。
这是合理的做法还是应该使用nvarchar(max)?
如果我使用nvarchar(8000)我可以容纳多少个字符?
我关心的是检索行所需的时间。我是否正确假设如果我使用nvarchar(max),则检索行需要更长的时间。
答案 0 :(得分:5)
简短版本 - 使用NVARCHAR(MAX)
,直到您确定存在明确的性能问题需要解决 - 尝试手动拆分大型博客条目以便保存它们"内联"几乎肯定会导致比将其留给SQL Server更糟糕的性能。
长版本 - SQL Server将数据存储在名为pages的8060字节大小的块中。通常,单个列的长度不能超过此大小,但是某些大值类型(例如TEXT
)可以专门处理,并且它们的值替换为24字节指针指向存储在别处的实际数据(在ROW_OVERFLOW_DATA
分配单位)
NVARCHAR(MAX)
数据类型实际上提供了一种混合方法 - 在数据足够小的情况下,值通常会存储在数据页中,但是当数据太大时,它是无缝的为您转换为大值类型。这通常意味着你将获得两全其美。