SQL Server 2000删除顶部(1000)

前端之家收集整理的这篇文章主要介绍了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.f2er.com/mssql/81659.html

猜你在找的MsSQL相关文章