空列会占用表中的空间吗?

aro*_*ron 23 sql-server-2008 database-design

我有一张包含非常基本信息的表格。只是一个标题和几个日期字段。有一个字段叫做comments,它是varchar(4000) 大多数时候我们把它留空,但有时会在这里输入大量数据。这真的是一个糟糕的设计吗?或者这只是有点低效?

我认为为此列创建一个单独的表会更好。

注意:这是 sql server 2008

在此处输入图片说明

gbn*_*gbn 13

不使用时占用最小空间

  • NULL 位图中的一位
  • 两个字节的长度(NULL 时为零)

开销很小,优化还为时过早。

在你知道你有问题之前,把它放在一张桌子上。您可以通过引入外连接来破坏 KISS,并增加查询数据的开销。

有关更多信息,请参阅/sf/ask/265511571/#3793265


JNK*_*JNK 11

我认为单独的表格会更好地提高页面密度并减少碎片,特别是如果您不总是填充该字段。

  • 一个数据页大约有8000 个字节
  • 你有一些行有 100 个字节,一些行超过 4000 个字节
  • 这些长行将单独在一个页面上,页面的其余部分是您的数据库占用的“浪费”空间,但可能永远不会保存数据
  • 如果您将数据添加到大部分完整页面上的记录的长字段中,它可能会溢出页面并导致指向该页面的指针以及记录的其余部分

所有这些空页面和指针都会导致性能不佳。如果可以,请对该字段进行规范化。


Aar*_*and 9

为了更可预测的性能(并避免每页的行数变化很大),我倾向于将此数据存储在相关表中 - 特别是如果它只在一小部分时间填充,特别是如果它只在一些查询。此值所在的行NULL确实会增加空间开销,但这是最小的。更重要的是一页可能只适合两行而下一页可以容纳 500 行——这确实会影响统计数据,你最好把它分开,这样它就分开存储,不会影响你的所有操作核心表。