Tsql SQL限制查询

Tsql SQL限制查询,tsql,sql-server-2000,Tsql,Sql Server 2000,我在限制SQL查询方面遇到了问题。我使用的是SQL 2000,所以我不能使用任何函数,如行数、CTE或偏移量行提取 我尝试了Select TOP limit*FROM方法并排除了已经显示的结果,但这种方法查询速度太慢,因为有时我的结果查询会获取10000多条记录 我还尝试了以下方法: SELECT * FROM ( SELECT DISTINCT TOP 100 PERCENT i.name, i.location, i.image , ( SELECT count(DISTINCT i

我在限制SQL查询方面遇到了问题。我使用的是SQL 2000,所以我不能使用任何函数,如行数、CTE或偏移量行提取

我尝试了Select TOP limit*FROM方法并排除了已经显示的结果,但这种方法查询速度太慢,因为有时我的结果查询会获取10000多条记录

我还尝试了以下方法:

SELECT * FROM (
 SELECT DISTINCT TOP 100 PERCENT i.name, i.location, i.image ,  
 ( SELECT count(DISTINCT i.id) FROM image WHERE i.id<= im.id ) AS recordnum 
 FROM images AS im 
 order by im.location asc, im.name asc) as tmp 
 WHERE recordnum between 5 AND 15 
这里也有同样的问题,另外还有一个问题,因为我无法在记录um的子查询中添加订单选项。我已经将这两个解决方案都放在存储过程中,但查询执行仍然很慢

所以我的问题是: 在SQL 2000中,有没有一种有效的方法可以将查询限制为每页拉取20条记录,以获取超过10000条的大量数据


谢谢

就查询而言,没有好的执行方式。如果性能非常关键,并且数据总是分组/排序相同,则可以添加一个int列,并根据分组/排序按触发器设置值。索引它,它应该是非常快的阅读;写入速度会慢一点


另外,确保在image和images的Id列上有索引。

现在子查询只运行一次 如果im2.id为null,则将跳过前40行

SELECT top 25 im1.* 
FROM images im1 
left join ( select top 40 id from images order by id ) im2
on im1.id = im2.id
where im2.id is null
order by im1.id

10000条记录的数量不应该很大,当然也不应该很大,请检查您的索引。如果分页是问题,也可以考虑使用游标。表中有多少数据?Rowcount?image表有超过1300000条记录:通过添加过滤器,有时我会提取大约40000条记录可能的重复项我不明白为什么要选择前100%的记录?这能实现什么?获取数据间隔的一种方法是在子查询中选择前15位,然后在外部查询中颠倒顺序并选择前10位,这将为您提供原始顺序的5-15条记录。