1

我正在尝试编写一个小型博客引擎。我很想找到一个示例 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) 检索该行将花费更长的时间。

4

1 回答 1

5

简短的版本 -NVARCHAR(MAX)在您确定有明确的性能问题需要解决之前一直使用 - 尝试手动拆分大型博客条目以便“内联”保存它们几乎肯定会导致性能比将其留给 SQL Server 更差.


长版本-SQL Server 将数据存储在称为页面的 8060 字节大小的块中。通常单个列的长度不能超过这个大小,但是TEXT可以特别处理某些大值类型(例如 ),并将它们的值替换为指向存储在其他地方(在ROW_OVERFLOW_DATA分配单元中)的实际数据的 24 字节指针

数据类型实际上提供了一种混合方法——在NVARCHAR(MAX)数据足够小的情况下,值会像往常一样存储在数据页面中,但是当数据太大时,它会无缝转换为大值类型你。这通常意味着您可以两全其美。

于 2013-06-04T15:58:57.500 回答