Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 减少了SQL中的行大小';缩小的桌子尺寸_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 减少了SQL中的行大小';缩小的桌子尺寸

Sql server 减少了SQL中的行大小';缩小的桌子尺寸,sql-server,sql-server-2005,Sql Server,Sql Server 2005,有人能解释一下我在SQLServer2005中看到的一些行为吗 我的任务是缩小我们的数据库大小 该表包含近600万条记录,我将行大小计算为1990字节。我复制了一份表,通过各种技术将行大小减少到803字节 当我将原始表的数据大小(右键单击properties或sp_spaceused)与新表进行比较时,我发现只节省了21.7 MB。这与我的期望相差甚远 下面是我如何计算行大小的: 如果列为数字/十进制,则我使用MSDN大小(http://msdn.microsoft.com/en-us/libr

有人能解释一下我在SQLServer2005中看到的一些行为吗

我的任务是缩小我们的数据库大小

该表包含近600万条记录,我将行大小计算为1990字节。我复制了一份表,通过各种技术将行大小减少到803字节

当我将原始表的数据大小(右键单击properties或sp_spaceused)与新表进行比较时,我发现只节省了21.7 MB。这与我的期望相差甚远

下面是我如何计算行大小的: 如果列为数字/十进制,则我使用MSDN大小(http://msdn.microsoft.com/en-us/library/ms187746.aspx),对于其他所有内容,我都使用syscolumns.length。如果该列可为空,我会额外添加一个字节

下面是我实现的一些更改

  • 把不必要的女巫变成了女巫
  • 使列不为空
  • 减少了varchar列的最大长度,以适合实际数据
  • 删除了一些未使用的列
  • 将datetime转换为smalldatetime
  • 将一些小数转换成整数
  • 将16个可空位列合并为位掩码int
  • 根据这一点,我的计算显示行大小减少了60%,相对于600万行的表,我预计将节省超过21MB。它从2762536KB下降到2740816KB

    有人能给我解释一下这种行为吗


    p、 这不考虑任何索引。

    我认为您需要在表上重建聚集索引。

    问题是更改表不会回收任何空间。删除列仅符合逻辑,列是隐藏的,而不是删除的。修改列类型通常会导致添加新列并隐藏上一列。所有这些操作都会增加表的物理大小。要“真正”回收空间,您需要重建表。使用SQL 2008及更高版本,您将发布一个。在SQL2005中,您可以发布

    可能是删除了一些行?您没有尝试执行数据库清理吗?请尝试重新调整到新表中。可能是未使用的空间尚未再次分配给空闲空间。只需将新的简化表复制到一个新表,然后看看会发生什么。也就是说:减少28MB是不值得的。如:如果这是节省,那么所讨论的权力会做出糟糕的优化动作。特别是给出了一些缺点。请给出前后的表格定义。不确定从何处计算这些行大小?
    NULL\u位图
    对每一列都有一位,不管它是否可为NULL,varchar列的最大长度不会影响行大小。里面的东西不知道。@Tom你真是太棒了。我选择了一个新表,它缩小了表的大小。这让我意识到我的测试是有缺陷的,因为当我进行第一轮测试时,我复制的表并没有接受它的主键。我添加了PK,大小减小到1.04GB。好多了!如果你发布一个答案,我会投你几分。