SQL限制查询

时间:2013-01-25 13:25:21

标签: tsql sql-server-2000

我遇到限制SQL查询的问题。我正在使用SQL 2000,所以我不能使用任何函数,如ROW_NUMBER(),CTE OR OFFSET_ROW FETCH

我尝试了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的子查询中添加ORDER选项。我已将两个解决方案都放在存储过程中,但查询执行仍然很慢。

所以我的问题是: 有一种有效的方法来限制查询在SQL 2000中为大量数据(即超过10000)提取每页20条记录吗?

感谢。

2 个答案:

答案 0 :(得分:0)

查询方面,没有很好的表现方式。如果性能至关重要且数据总是按相同的顺序进行分组/排序,则可以添加一个int列,并根据分组/排序按触发器设置值。对它进行索引,读取速度应该非常快;写入会慢一些。

另外,请确保在图像和图像上的Id列上有索引。

答案 1 :(得分:0)

现在子查询只运行一次 其中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