微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server 2000删除顶部(1000)

我有一个大型sql Server数据库,表中约有4500万条记录.我正在归档这张表,需要在两年前删除所有条目.我有插入我的归档表工作正常,但是我删除时效率问题.

我的问题在于目前在表中的索引.我想删除(和存档插入)在1000个记录块.为此,我需要确定满足要求(大于两岁)的“顶级”1000条记录.行上的DateTime标记是聚簇索引,因此这对于抓取行很有用.但是sql 2000不允许DELETE TOP 1000 ….所以我需要做一些像:

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

如果将唯一ID编入索引,这将非常有用.由于不是这样,这需要很长时间(正在扫描要删除的1000条记录中的每一条的表).表上没有唯一标识记录的其他索引.我被告知在UniqueID上计算索引会太贵了,因为这是一个活动数据库.任何人都可以指出一种优化此查询方法

解决方法

如何重写查询
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

注意与TOP的选择的区别可以写下来,没有括号.对于UPDATE,DELETE和INSERT,表达式必须括起来,即使它只是一个常数,如上所述.

原文地址:https://www.jb51.cc/mssql/81659.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐