如何从sql server上的一个表中删除8,500,000条记录

Ice*_*Ice 9 sql sql-server sql-server-2005

删除unt_uid为null的活动

将是最快的方式,但没有人可以访问数据库/表,直到这个语句完成,所以这是一个禁忌.

我定义了一个游标来在工作期间完成这项任务,但无论如何,对生产力的影响很大.那么如何删除这些记录以保证这个数据库的正常使用呢?

它是32位Win2003上的SQL-2005服务器.第二个问题是:你估计这项工作需要多长时间(6小时或60小时)?(是的,我知道这取决于负载,但假设这是一个小型企业环境)

Kel*_*tex 9

你可以用块来做.例如,每10秒执行一次:

delete from activities where activityid in 
  (select top 1000 activityid from activities where unt_uid is null)
Run Code Online (Sandbox Code Playgroud)

显然定义行计数(我任意选择1000)和间隔(我选择10秒),这对您的应用程序最有意义.


Ray*_*Ray 5

也许不是从表中删除记录,而是可以创建一个新的相同表,插入要保留的记录,然后重命名表,以便新表替换旧表.这仍然需要一些时间,但您网站上的停机时间非常短(仅在交换表时)