gpt4 book ai didi

SQL Server 2000 删除顶部 (1000)

转载 作者:行者123 更新时间:2023-12-02 07:21:23 25 4
gpt4 key购买 nike

我有一个大型 SQL Server 数据库,其中有一个包含大约 4500 万条记录的表。我正在存档该表,并且需要删除两年前以上的所有条目。我的存档表插入工作正常,但删除时遇到效率问题。

我的问题出在当前表上的索引上。我想删除(和归档插入)1000 个记录 block 。为此,我需要确定满足要求的“前 1000 条”记录(超过两年)。行上的日期时间戳是聚集索引,因此这非常适合抓取行。然而 SQL 2000 不允许 DELETE TOP 1000....所以我需要做类似的事情:

DELETE FROM <table> WHERE [UniqueID] IN 
(SELECT TOP 1000 [UniqueID] FROM <table> WHERE [DateTime] < @TwoYearsAgo)

如果 UniqueID 已建立索引,这会非常有用。因为不是,所以这需要很长时间(它正在扫描表以查找要删除的 1000 条记录中的每一条)。表上没有其他唯一标识记录的索引。有人告诉我,在 UniqueID 上计算索引的成本太高,因为这是一个实时数据库。谁能指出优化此查询的方法吗?

最佳答案

SET ROWCOUNT ON has been deprecated, use TOP instead.

<罢工>重写查询怎么样?
SET ROWCOUNT 1000
DELETE FROM <table> WHERE [DateTime] < @TwoYearsAgo

请参阅 SET ROWCOUNT (Transact-SQL) 的文档。

另请注意,根据 DELETE 的文档,它支持 TOP子句,但这对于 SQL Server 2005 及更高版本显然是新的。我这样说是因为听起来您的数据库服务器不支持它,但是您实际上尝试过使用它吗?我无权访问 SQL Server 2000 文档,因此我不确定该版本是否支持它。很可能不是。

DELETE TOP (1000) FROM <table> WHERE [DateTime] < @TwoYearsAgo

请注意与不带括号的 select 上的 TOP 的区别可以 的书写方式。对于 UPDATE、DELETE 和 INSERT,表达式必须带括号,即使它只是像上面这样的常数。

关于SQL Server 2000 删除顶部 (1000),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1925228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com