测量SQL Server数据库中空白空间的影响

时间:2014-07-10 21:29:12

标签: sql sql-server

我被教导永远不要在数据库中存储不需要的空格。

我认为这是因为所有浪费的空间。

所以我找到了一张包含300多万行的表格。由于额外的空间,列在某些情况下是两倍长。写了一个脚本来修剪前导和尾随空格并将空字符串转换为空值。

我用sp_spaceused来衡量这对桌子使用的空间量有多大的影响,我几乎没有看到。

唯一的尺寸变化是index_size ......并且改变了1mb,甚至可能不均匀。

数据列实际上没有变化。

大多数专栏是varchar,我看到没有影响吗?或者我没有正确解释sp_spaceused正在衡量的内容?

1 个答案:

答案 0 :(得分:3)

这取决于表中字段的数据类型。固定长度数据类型(例如integer和char())使用相同数量的空间而不管其中的内容(除了稀疏列之外的一些例外)。 varchar()等可变长度列仅使用它们所需的空间。如果在varchar字段中有五十个空格,并用NULL替换它,那么现在可以节省空间。

要考虑的另一件事(我确定还有更多)是在页面上适合多少行。如果页面上有四行并且它们占用整个页面,则将每行减少10%不会打开足够的可用空间以使另一行适合页面。 SQL Server不会在页面之间拆分行(除了少数例外)。

如上所述,尝试对所有索引进行碎片整理,看看是否有帮助。