我有一个包含大约 4500 万条记录的表的大型 SQL Server 数据库。我正在归档此表,并且需要删除两年前的所有条目。我可以正常插入存档表,但是在删除时遇到了效率问题。
我的问题在于当前表上的索引。我想在 1000 个记录块中删除(和存档插入)。为此,我需要确定满足要求的“前”1000 条记录(超过两年)。该行上的 DateTime 标记是一个聚集索引,因此非常适合抓取行。但是 SQL 2000 不允许 DELETE TOP 1000 .... 所以我需要做类似的事情:
DELETE FROM <table> WHERE [UniqueID] IN
(SELECT TOP 1000 [UniqueID] FROM <table> WHERE [DateTime] < @TwoYearsAgo)
如果对 UniqueID 进行索引,这将非常有用。由于不是,这需要很长时间(它正在扫描表中要删除的 1000 条记录中的每一条)。表上没有其他唯一标识记录的索引。有人告诉我,在 UniqueID 上计算索引成本太高,因为这是一个实时数据库。谁能指出优化此查询的方法?