【发布时间】:2015-07-26 14:21:04
【问题描述】:
我正在使用 SQL Server,并且我有一个很大的表。
如果我们使用delete from table 查询,我们会跳转到事务日志。
我应该使用这样的查询
delete top (@count) from table
然后我应该把它放在我的 asp.net 代码中。
我的问题是实现这些目标的最佳@count 金额:
- 该表将能够在删除过程中响应其他查询
- 事务日志文件中没有跳转
- 删除所有行的速度超快(我有数十万行)
补充资料: 这是一个 item_in_tags 表,它存储项目 ID 和标签 ID,因此当我想重新标记所有项目时,它有很多行我需要删除其中的所有内容,然后将数据输入到表中我不能进行非常大的事务,因为主机不接受跳转事务日志,我没有收缩权限。 我想保持事务的大小和快速,但我也想获得最佳性能,并且在重新标记过程中我不想因为表锁定等问题而停机。
【问题讨论】:
-
如果你想删除所有表为什么不使用
TRUNCATE TABLE。 -
在截断表之前,您需要删除该表的所有外键约束(如果有)
-
谢谢,我不知道,也没有用过!
-
SQL Server 如何处理锁定有 5000 行的限制 - 对于事务中的 5000 行(或更少),它将锁定个别行被删除 - 如果您的事务一次删除超过 5000 行,SQL Server 将执行 锁升级 并锁定 整个表,这意味着您甚至不能再读一遍。这可能是批量删除时要记住的一个阈值...
标签: sql asp.net sql-server tsql