当我从 SQL Server 中的表中删除行时,数据库文件的大小不会变小。这是为什么?即使我从每个表中删除每一行,文件大小仍然与删除前一样大。
我有兴趣了解原因,而不是如何缩小数据库文件。
根据需要分配数据库文件中的空间。当从表中删除行时,该空间在数据文件中被简单地标记为未使用。数据文件不会自动收缩(除非启用了自动收缩),因为这需要额外的磁盘 I/O,而这通常会对性能产生反作用。假设任何未使用的空间将在某个时候被新行重新使用。
总而言之,分配给磁盘上文件的空间与数据库中表的逻辑大小并不是紧密耦合的。
更详细地(虽然仍然非常简化):
他们肯定是有关系的。行存储中的行存在于页面上,页面大小为 8k,并排列在范围内。范围是磁盘上 8 个连续页面的分组。
行存储行存在于页面上,当“删除”时不会从文件中物理删除 - 只是通过使用位图和字节图分配结构在 SQL Server 内部标记为“空闲”,SQL Server 将相应地重新使用空间。
归档时间: |
|
查看次数: |
1342 次 |
最近记录: |