我被教导永远不要在数据库中存储不需要的空格。
我认为这是因为所有浪费的空间。
所以我找到了一张包含300多万行的表格。由于额外的空间,列在某些情况下是两倍长。写了一个脚本来修剪前导和尾随空格并将空字符串转换为空值。
我用sp_spaceused
来衡量这对桌子使用的空间量有多大的影响,我几乎没有看到。
唯一的尺寸变化是index_size
......并且改变了1mb,甚至可能不均匀。
数据列实际上没有变化。
大多数专栏是varchar
,我看到没有影响吗?或者我没有正确解释sp_spaceused
正在衡量的内容?
答案 0 :(得分:3)
这取决于表中字段的数据类型。固定长度数据类型(例如integer和char())使用相同数量的空间而不管其中的内容(除了稀疏列之外的一些例外)。 varchar()等可变长度列仅使用它们所需的空间。如果在varchar字段中有五十个空格,并用NULL替换它,那么现在可以节省空间。
要考虑的另一件事(我确定还有更多)是在页面上适合多少行。如果页面上有四行并且它们占用整个页面,则将每行减少10%不会打开足够的可用空间以使另一行适合页面。 SQL Server不会在页面之间拆分行(除了少数例外)。
如上所述,尝试对所有索引进行碎片整理,看看是否有帮助。