每天晚上我都需要修剪一张表格,只包含最新的20,000条记录。我可以使用子查询:如何删除MS SQL 2005中最新的20,000条记录?
delete from table WHERE id NOT IN (select TOP 20000 ID from table ORDER BY date_added DESC)
但这似乎效率低下,尤其是如果我们以后决定保留50,000条记录。我使用的SQL 2005,并认为我可以使用ROW_NUMBER()OVER以某种方式做到这一点?订购它们并删除所有ROW_NUMBER大于20,000的商品?但我无法实现它的工作。子查询是我最好的选择还是有更好的方法?
你是对的,它唯一的服用3秒清除表约50,000记录在里面。我认为IN()子句非常低效,但也许就是当你实际传入一个文本ID列表时。谢谢您的帮助。 – 2008-11-12 22:37:34
是的,一个包含20,000个以逗号分隔的ID的IN()子句可能效率很低。不过,我敢打赌它仍然会在10-15秒内执行。 – MusiGenesis 2008-11-12 22:40:14
这就是,如果它同意甚至解析一个字符串,当然很长。 – MusiGenesis 2008-11-12 22:40:50