我们正在使用一个工具,我们需要删除日志表。现在,我们要保留100万行并删除其余行(如果有的话)。这很耗时,有时在生产中需要12个小时来删除数据,这会影响日常交易。有没有其他方法可以有效地删除日志表,而不会影响日常交易。
让我们假设我们要保留100万行:
Select query:
Select Query:select min(date) from (select date from table order by date desc) where rownum <= 1000000
Delete Query:
Delete Query:Delete from table where date > (result of select query)
我们有什么方法可以优化这两个查询吗?
答案 0 :(得分:3)
插入较小的表比从较大的表中删除要快得多。在这种情况下,您可以将要保留的记录插入到临时表中。 如果记录不是问题而参照完整性允许,您可以简单地:
答案 1 :(得分:1)
您希望一次删除一万行。
delete top (10000) from tableA where condition1 <> xyz
while (@@rowcount >0)
begin
delete top (10000) from tableA where condition1 <> xyz
end
delete from tablea where condition1 <> xyz
这样您就不会有大型事务日志。您可能希望尝试行数(有些人使用1000行)但它非常依赖于计算机中的活动量以及驱动器的速度以及日志文件的放置和配置。你说你想保留某些行,所以我添加了条件1&lt;&gt; XYZ