sql-server - 从 SQL Server 中删除行会增加数据库大小

标签 sql-server database database-indexes database-optimization

我用 C# 编写了一些代码,用于从数据库中删除记录。这是包含在事务中的简单 SQL 删除代码。

using (SqlTransaction trans = conn.BeginTransaction()) {
    //some delete code
    trans.Commit();
}

我已经删除了数据库中 4 个表中的大约 400 万行。当我通过 Windows 资源管理器检查两个数据库的数据库备份大小时,大小急剧增加了大约三倍

  • 删除前:7GB
  • 删除后:28GB

我确认 MDFLDF 文件的大小都增加了。我还注意到一些不受删除影响的表的索引大小增加了。

删除后:

enter image description here

删除前:

enter image description here

我的目标是删除记录以减少数据库大小,但它反而增加了。你能告诉我为什么尺寸在增加吗?

编辑:

删除后:

  • database_size:61050.69 MB
  • 未分配空间:9592.60 MB
  • 保留:303512 KB
  • 数据: 207040 KB
  • index_size: 53024 KB
  • 未使用:43448 KB

删除前:

  • database_size:10067.88 MB
  • 未分配空间:16.69 MB
  • 保留:7290176 KB
  • 数据: 2937656 KB
  • index_size: 4324848 KB
  • 未使用:27672 KB

最佳答案

当您删除记录时,它会记录到事务日志中。 因此通过删除如此多的记录,事务日志的大小会增加。

所以我认为您必须清除/重置交易日志(谷歌搜索) 同时,您还重新组织了索引。

这两个步骤都是强制性的。

关于sql-server - 从 SQL Server 中删除行会增加数据库大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37024435/

相关文章:

SQL Server - 是否可以在行更新之前返回现有的列值?

sql - 如何连接多个表?

ruby-on-rails - 如何使用外部 Controller 创建新的设计用户

php - 删除按钮未返回删除查询的正确值

使用 varchar_pattern_ops 索引而不是 pkey 索引的 Django-Postgres WHERE 查询

MySQL 没有从索引中选择正确的行数

SQL : Retrieve inserted row IDs array/table

sql-server - SQL Server : deleting records with similar time

java - 了解 Hibernate 文档中可选的事务定义

PostgreSQL citext 索引与较低的表达式索引性能