删除SQL Server 2005记录而不记录日志

KP.*_*KP. 16 sql-server sql-server-2005

如何从SQL Server 2005表中删除记录而不将其记录到事务日志中.

我不想记录,因为一旦删除,将永远不再需要这些记录.

目前各种删除需要花费太多时间.是否有其他选项可以提高删除语句的性能?我不能使用truncate,因为需要where子句.

小智 16

这很简单:

DECLARE @BatchSize INT
SET @BatchSize = 100000

WHILE @BatchSize <> 0
BEGIN
    DELETE TOP (@BatchSize)
    FROM [dbo].[UnknownTable]
    SET @BatchSize = @@rowcount
END  
Run Code Online (Sandbox Code Playgroud)


Dav*_*kle 7

我认为你在数据库中混淆了事务日志的概念.事务日志的主要功能不是用于恢复旧行 - 它的工作是保持数据库的一致性.所有修改都通过事务日志,没有办法解决这个问题.这是好事.事务日志还用于进行数据库的时间点备份和还原,并在两个服务器之间进行镜像时使用.

如果删除的时间过长,则应首先查看几个区域.

1)你有没有任何DELETE触发器在你的桌子上触发?如果是这样,那些可能是缓慢的来源.

2)您的DBA是否正确设置了数据库,至少将事务日志和数据文件保存在不同的物理磁盘上?

3)你有很多被检查的外键吗?例如,如果您有另一个表引用要删除的表,则数据库服务器将根据引用表检查每次删除,以确保delete语句不会导致其他表变得不一致.

4)您删除的表上是否有太多索引或其他高索引负担?每个已删除的行都将对应于每个索引中的条目也被删除,因此请谨慎使用索引.您的索引是否得到妥善维护?

5)是否需要很长时间才能找到要删除的行?如果DELETE语句中的WHERE子句成本太高,这将真正减慢您的删除速度.尝试暂时将DELETE语句更改为SELECT语句,并查看该查询是否快速运行.如果没有,则应通过编辑,重构表或添加适当的索引来优化SELECT语句.然后将语句更改回DELETE.如果在优化期间相应的SELECT语句的执行得到改进,则应该显着提高性能.

如果您有一个大型批处理作业对表执行大量删除操作,您可能需要暂时禁用触发器,或者您可能希望在这些大删除批处理之后删除并重新创建索引和外键.这也可以加快速度.


mat*_*msa 1

首先,请注意,您不能没有事务日志。如果在进行大量删除时服务器断电怎么办?SQL Server 需要此信息才能执行原子操作

\n\n

您可能感兴趣的是“恢复模型\xe2\x80\x9d”。请阅读 technet 上的这篇文章:http://technet.microsoft.com/en-us/library/ms189275.aspx

\n