3

我正在构建一个包含大约 30 个表的数据库:

  • 表中的最大列数约为 15。
  • 对于数据类型,我主要使用 VarChar(50) 作为文本
  • 和 Int og SmallInt 用于数字。
  • 标识列是唯一标识符

我一直在测试一些填充数据并再次删除。我没有删除所有数据,所以everey表是空的。但是,如果我在 Management Studio 中查看数据库的属性,大小显示为 221,38 MB!

怎么会这样?请帮忙,我收到了来自托管公司的通知,说我超出了我的限制。

此致, :-)

4

2 回答 2

7

我建议您首先查看数据库的恢复模式。默认情况下,恢复模式为 FULL。这将使用您执行的所有事务填充日志文件,在您进行备份之前永远不会删除它们。

要更改恢复模式,请右键单击数据库并选择属性。在属性列表中,选择选项(在右侧窗格中)。然后将“恢复模型”更改为简单。

您可能还想缩小文件。为此,请右键单击数据库并选择 Tasks --> Shrink --> Files。您可以通过更改中间的“文件类型”选项来缩小数据文件和日志文件。

马丁的评论很有趣。即使日志文件处于自动截断模式,您仍然会遇到记录删除的问题。如果您创建了大型表,则日志文件仍会扩展,并且在您截断文件之前不会恢复空间。你可以通过使用TRUNCATErathe than来解决这个问题DELETE

truncate table <table>

不会记录被删除的每条记录 (http://msdn.microsoft.com/en-us/library/ms177570.aspx)。

delete * from table

记录每条记录。

于 2012-09-21T13:31:11.030 回答
4

当您插入、更新、删除和设计更改每个事务的日志文件时,就会创建一大堆其他数据。此事务日志是 SQL Server 数据库的必需组件,因此无法在任何可用设置中禁用。

以下是 Microsoft 的一篇文章,内容是通过备份来缩小 SQL Server 生成的事务日志。

http://msdn.microsoft.com/en-us/library/ms178037(v=sql.105).aspx

另外,您是否在为您的列编制索引?在具有高行数的表上,由多列组成的索引可能会变得不必要地大,尤其是在您只是进行测试时。尝试只在每个表的一列上设置一个聚集索引。

您可能还想了解表统计信息。它们可以帮助您的索引,还可以帮助您执行 SELECT DISTINCT 或 SELECT COUNT(*) 等查询。

http://msdn.microsoft.com/en-us/library/ms190397.aspx

最后,您需要升级 SQL Server 数据库的存储分配。您使用它的次数越多,它就会越快地增长。

于 2012-09-21T13:09:13.960 回答