每天晚上我都需要修剪一張表格,只包含最新的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